1

久しぶりの投稿ですが、投稿は初めてです。私は一生、自分でこれを解決することも、これを解決する答えを見つけることもできません。

部門、売上、日付の列を持つtable1があります。各行は販売を記録します。

過去 7 日間 (週末を含む) の売上を部門ごとに (Sum() を使用して) 返すクエリが必要で、売上が発生していない (日付のレコードがない) 日は値 0 で返されます)。

現在、CTE を使用して過去 7 日間の日付のリストを生成しています。コードは次のとおりです。

DECLARE @startDate datetime, @endDate datetime; 

SET @startDate = DateAdd(day, -6, GetDate()); 
SET @endDate   = GetDate(); 

WITH [dates_CTE] ([date]) AS 
   (SELECT @startDate AS [date] 
    UNION ALL 
    SELECT DATEADD(d, 1, [date]) AS [date] 
    FROM [dates_CTE]
    WHERE [date] < @endDate) 

--This part just to show contents of CTE, not used in full code
SELECT [date], CONVERT(date, [date])
FROM [dates_CTE]
ORDER BY [date] DESC

ソースから変更: https://gallery.technet.microsoft.com/scriptcenter/97fe6de5-ab27-40db-8565-637988f028a2

今、このコードを使用して Table1 からデータを選択し、欠落している日付の行を含めようとしています。ここで、売上高は NULL である必要があります (これが機能したら、ISNULL を使用して 0 に変更します)。

SELECT SUM([Table1].[sales]) AS 'Total Sales', CONVERT(date, [Table1].[date]) AS 'Date'
FROM [Table1]
RIGHT JOIN [dates_CTE]
ON CONVERT(date, [Table1].[date]) = CONVERT(date, [dates_CTE].[date])
WHERE [Department] = 'ELC'
GROUP BY CONVERT(date, [Table1].[date])
ORDER BY CONVERT(date, [Table1].[date]) DESC

CONVERT(date,) 関数を少し使いすぎたことにお気付きかもしれません。これは、Table1.date が日付のみを記録し、時刻をすべてゼロにするためです。つまり、YYYY-MM-DD 00:00:00.000 です。私のCTEは現在の日時を取得します。明らかに、時間にはゼロ以外のものがあります。したがって、私は CONVERT を使用して両方を日付のみに変換し、時間は無関係であるため無視しています。

私が何をしているように見えても (CONVERT(date,) を使用せずに、さまざまな結合を試してみましたが、役に立ちませんでした。出力は常に同じようです。値を含む 5 つのレコードしか返されません。 null / 0を読み取るだけのものがさらに2つ必要です。

4

1 に答える 1

1

列[部門]はどのテーブルに属しますか?

[Table1] 列の場合は、[Department] = 'ELC'条件を からWHEREに移動しますON。つまり、

SELECT SUM([Table1].[sales]) AS 'Total Sales',
       CONVERT(date, [Table1].[date]) AS 'Date'
FROM [Table1]
RIGHT JOIN [dates_CTE]
ON CONVERT(date, [Table1].[date]) = CONVERT(date, [dates_CTE].[date])
   AND [Department] = 'ELC'
GROUP BY CONVERT(date, [Table1].[date])
ORDER BY CONVERT(date, [Table1].[date]) DESC

条件が の場合WHERE、外部結合は通常の内部結合として実行されます。に移動しONて、真の外部結合動作を取得します。

于 2015-07-06T06:54:38.813 に答える