日付に基づいてテーブル内のデータをピボットしていますが、データのない日付にはNULLを返す必要があります。
[dbo]。[メトリクス]のデータ:
私が実行している動的ピボットSQL:
DECLARE @cols NVARCHAR(1000);
SELECT @cols =
STUFF((SELECT N'],[' + month_day
FROM (SELECT DISTINCT RIGHT(CONVERT(NCHAR(10), [Date], 126), 2)
FROM [Metrics]) AS O(month_day)
ORDER BY month_day
FOR XML PATH('')
), 1, 2, '') + N']';
DECLARE @sql NVARCHAR(2000);
SET @sql =
N'SELECT [Key], ' + @cols +
N' FROM (SELECT [Key], ' +
N' RIGHT(CONVERT(NCHAR(10), [Date], 126), 2) AS month_day, ' +
N' [Value] ' +
N' FROM [Metrics]) AS O ' +
N'PIVOT ' +
N'(SUM([Value]) FOR month_day IN (' + @cols + N')) AS P;';
EXECUTE(@sql);
...そして動的SQLが返す結果セット:
ご覧のとおり、私はその月の毎日のデータを持っていないため、その日の列を返さないだけです。セルごとにNULLの列10-23および28-31を返すようにするにはどうすればよいですか?実際の月に関係なく、列1〜31を返す必要があります(たとえば、特定の月の日数が31日未満の場合でも31列)。
どんな助けでも大歓迎です。