以下のような結果を表示するには、まずCTEを使用して範囲内のすべての可能な日付を生成します。
Row Amount CreatedDate
1 200 2011-08-12
2 0 2011-08-13
3 0 2011-08-14
4 0 2011-08-15
CREATE TABLE #temp(TranID INT, OrderID INT, Amount INT, CreatedDate date)
INSERT INTO #temp (TranID, OrderID, Amount, CreatedDate) VALUES (1,1,200 ,'08/12/2011')
INSERT INTO #temp (TranID, OrderID, Amount, CreatedDate) VALUES (2,1,100 ,'08/16/2011')
DECLARE @startDate DATE ,@endDate DATE
Select @startDate = '08/12/2011' , @endDate = '08/15/2011'
;WITH Dates (CreatedDate, RowNumber) AS (
/* Generating all possible dates in the range */
SELECT @startDate AS CreatedDate, 1 AS RowNumber
UNION ALL
SELECT dateadd(d,1,CreatedDate), RowNumber+1 FROM dates WHERE CreatedDate < @endDate
)
SELECT RowNumber, Coalesce(sum(t.Amount),0) AS Amount, d.CreatedDate FROM Dates d
LEFT OUTER JOIN #temp t
ON d.CreatedDate = t.CreatedDate
GROUP BY RowNumber,d.CreatedDate
"現在の処理値"はどこから来ていますか?私はあなたが望む結果で使用しているロジックを見ることができません。なぜ'08/13/2011'に0に設定された金額があるのですか。 –
私は明らかに私は現在の処理値のために何を呼び出すべきかわかりません。もう一度説明しましょう。与えられた値の範囲と作成された日付の間の各日付と比較したいと思います。一致する場合は値を表示したい0 – Praneeth
これは私の思うようなサンプルデータを編集したので、もう少し意味がありますが、目的の結果セットに4行ありませんか? –