2016-07-05 13 views
0

Hier ist meine Abfrage, um den Bericht Apportieren für jeden Monat der bezahlten und unbezahlten Buchungengenerieren monatlich basierend Datensätze in einer Periode

SELECT tbc.tbcId 
    ,tbc.tbcName 
    ,(
     SELECT COUNT(bb.bbId) 
     FROM MyBooking bb 
     WHERE bb.tbcId = tbc.tbcId 
      AND bb.bbIsPayed = 1 
      AND Year(bb.bbDate) = '2016' --proc parameter @year 
      AND Month(bb.bbDate) = '7' --proc parameter @month 
     ) AS PaidCount 
    ,(
     SELECT SUM(CASE 
        WHEN bb.bbVAT = 1 
         THEN (bb.bbPrice/100) * 80 
        ELSE bb.bbPrice 
        END) 
     FROM MyBooking bb 
     WHERE bb.tbcId = tbc.tbcId 
      AND bb.bbIsPayed = 1 
      AND Year(bb.bbDate) = '2016' --proc parameter @year 
      AND Month(bb.bbDate) = '7' --proc parameter @month 
     ) AS PaidAmount 
    ,(
     SELECT COUNT(bb.bbId) 
     FROM MyBooking bb 
     WHERE bb.tbcId = tbc.tbcId 
      AND bb.bbIsPayed <> 1 
      AND Year(bb.bbDate) = '2016' --proc parameter @year 
      AND Month(bb.bbDate) = '7' --proc parameter @month 
     ) AS UnpaidCount 
    ,(
     SELECT SUM(CASE 
        WHEN bb.bbVAT = 1 
         THEN (bb.bbPrice/100) * 80 
        ELSE bb.bbPrice 
        END) 
     FROM MyBooking bb 
     WHERE bb.tbcId = tbc.tbcId 
      AND bb.bbIsPayed <> 1 
      AND Year(bb.bbDate) = '2016' --proc parameter @year 
      AND Month(bb.bbDate) = '7' --proc parameter @month 
     ) AS UnPaidAmount 
FROM BookingCategories tbc 
WHERE tbc.tbcIncludeReport = 1 
    AND tbc.tbcId IN (
     SELECT DISTINCT con.tbcId 
     FROM CategoryXTags con 
     WHERE (
       con.ttId = 26 
       OR con.ttId = 23 
       OR con.ttId = 24 
       ) 
     ) 
ORDER BY tbc.tbcName ASC; 

Ich habe laufen diese für einen bestimmten Zeitraum, beispiels Januar 2016 zu erhalten bis August 2016.

Ab jetzt führe ich dies in einer Schleife durch die Weitergabe einer @ year und @month Variable.

Ist es möglich, @FromDate und @Todate einfach zu übergeben und den Bericht für jeden Monat in derselben Abfrage zu generieren? Ich konnte nicht viel in SQL denken, um dies zu erreichen.

+0

prüfen schrumpfen http://sqlhints.com/tag/monthly-sum-data-in-sql-server/ –

Antwort

1

Ungeprüfte, aber ich denke, das wird dein Prozess nach unten

Declare @Date1 Date = '2016-01-01' 
Declare @Date2 Date = '2016-08-31' 

Select Period  = EOMonth(bb.bbDate) 
     ,tbc.tbcId 
     ,tbc.tbcName 
     ,PaidCount = sum(case when bb.bbIsPayed=1 then 1 else 0 end) 
     ,PaidAmount = sum(case when bb.bbIsPayed=1 and 1bb.bbVAT = 1 Then (bb.bbPrice/100) * 80 ELSE bb.bbPrice end) 
     ,UnpaidCount = sum(case when bb.bbIsPayed<>1 then 1 else 0 end) 
     ,UnPaidAmount = sum(case when bb.bbIsPayed <> 1 and bb.bbVAT = 1 Then (bb.bbPrice/100) * 80 ELSE bb.bbPrice end) 
From BookingCategories tbc 
Join MyBooking bb on (bb.bbId = tbc.tbcId) 
Where tbc.tbcIncludeReport = 1 
    and tbc.tbcId IN (26,26,24) 
    and bb.bbDate between @Date1 and @Date2 
Group By 
     EOMonth(bb.bbDate) 
     ,tbc.tbcId 
     ,tbc.tbcName 
Order By 1,tbc.tbcName ASC 
+0

Es irgendein Problem hat mit Übergabe des @ Date1 & @ Date1. Wenn ich 'und bb.bbDate zwischen @ Date1 und @ Date2' entferne, werden alle Datensätze angezeigt. Wenn ich hinzufügen, zeigt es keine Datensätze – Developer

+0

Ist bb.bbDate ein Datumsfeld? –

+0

@Developer ist der Wert, den Sie für die Variable Date1 weniger als den Wert für die Variable Date2 verwenden? Wenn Sie zwischen Datum und Datum verwenden, muss der Wert auf der linken Seite älter als der Wert auf der rechten Seite der Anweisung sein. – Matt

Verwandte Themen