2016-03-22 4 views
0

Sorgunun altında çalışıyorum, bu özel konum için tüm değerleri, geri ödeme tutarının ne kadar olduğunu gösterir. Ben aylık rapor göstermek istiyorum Ancak, benim Tablo 1'de olduğu o günler iadesi idi göstermek ve aynı sıfır değerleri görüntülemek gerekir:Belirli bir tarih aralığına göre eksik Tarih nasıl gösterilir?

SELECT businessDate AS 'Business Date' 
    ,Sum(convert(DECIMAL, ISNULL(T1.Amount, 0)) * 1) AS 'Refund Amount' 
FROM table1 T1 
WHERE (
     (T1.id = '1') 
     AND (T1.businessDate BETWEEN '20160201' AND '20160229') 
     AND (T1.Amount IS NOT NULL) 
     ) 
GROUP BY T1.businessDate 

benim Akım çıkışı geçerli:

Business Date Refund Amount 
    20160202   14 
    20160203   19 

olmalıdır:

Business Date Refund Amount 
    20160201    0 
    20160202   14 
    20160203   19 

öyleyse nasıl yukarıdaki hitap benim sorgu düzeltmek için ??

şöyle bir özyinelemeli CTE kullanmak
+0

birkaç yolu var yoksa bir .. http://stackoverflow.com/questions/7812986/easiest-way- -de-dahil-tarih--tablo-ile-tarih-arasında-ve-dahil-2-date-par sonra sadece bu – JamieD77

+0

http://sqlfiddle.com/#!9/4a420 – JamieD77

+0

@ katılmak katılmak gerekir JamieD77 Çok teşekkürler:) ... şimdi çalışıyor – 3MRAN

cevap

1

: Geçici tarih tablosunu oluşturmak için

WITH cte 
AS 
    (
     SELECT CAST('2016-02-01' AS date) [Date] 
     UNION ALL 
     SELECT DATEADD(DAY, 1, [Date]) 
     FROM cte 
     WHERE DATEADD(DAY, 1, [Date]) <= '2016-02-29' 
    ) 

SELECT 
    cte.[Date] [Business Date] 
    , SUM(CONVERT(decimal, ISNULL(T1.Amount, 0)) * 1) [Refund Amount] 
FROM 
    cte 
    LEFT JOIN (SELECT * FROM table1 WHERE id = 1) T1 ON cte.[Date] = T1.businessDate 
GROUP BY cte.[Date] 
+0

Ortak Tablo İfadesi (CTE) hakkında daha fazla bilgi için, http://stackoverflow.com/a/14275097/122139 adresini ziyaret edin. – Smandoli