2016-03-22 11 views
0

以下のクエリはうまくいきました。その特定の場所のすべての値がどれだけ払い戻し額で表示されますか。私は毎月のレポートを表示したい場合は、私が表1であり、当時は払い戻しませんでした示し、同じゼロ値を表示する必要があります。指定した期間に基づいて不足している日付を表示するにはどうすればよいですか?

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 

私の現在の出力は次のとおりです。

Business Date Refund Amount 
    20160202   14 
    20160203   19 

それは次のようになります。

Business Date Refund Amount 
    20160201    0 
    20160202   14 
    20160203   19 

上記に応えるために、私のクエリを修正するので、どのように?

+0

いくつかの方法を.. http://stackoverflow.com/questions/7812986/easiest-way-日付と日付の間に日付がついていて、日付が2つしかない場合は、 – JamieD77

+0

に参加する必要があります。http://sqlfiddle.com/#!9/4a420 – JamieD77

+0

@ JamieD77ありがとうございます:))...それは今動作します – 3MRAN

答えて

1

次のように私は、再帰CTEを使用する:あなたは1を持っていけない場合は、一時的な日付テーブルを構築するための

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

共通テーブル式(CTE)の詳細については、http://stackoverflow.com/a/14275097/122139を参照してください。 – Smandoli

関連する問題