要添加到 @Julien 的答案,您可以 group with pivot by PRODUCTION_DATE 的月份和年份,而无需使用 CTE 发送每个月的参数。
SELECT
[CATEGORY_ID], [PRODUCTION_MONTH], [PRODUCTION_YEAR],
[1], [2], [3], [4], [5], [6], [7], [8], [9], [10],
[11], [12], [13], [14], [15], [16], [17], [18], [19], [20],
[21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31]
FROM
(SELECT [CATEGORY_ID], [PRODUCT],
DATEPART(DAY, DATEADD(HOUR, -6, [PRODUCTION_DATE])) AS [PRODUCTION_DAY]),
DATEPART(MONTH, DATEADD(HOUR, -6, [PRODUCTION_DATE])) AS [PRODUCTION_MONTH],
DATEPART(YEAR, DATEADD(HOUR, -6, [PRODUCTION_DATE])) AS [PRODUCTION_YEAR]
FROM [dbo].[tblProducts]) As tmpProducts
PIVOT (
Count([PRODUCT])
FOR [PRODUCTION_DAY] In
([1], [2], [3], [4], [5], [6], [7], [8], [9], [10],
[11], [12], [13], [14], [15], [16], [17], [18], [19], [20],
[21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31])
) as piv
ORDER BY [CATEGORY_ID], [PRODUCTION_YEAR], [PRODUCTION_MONTH]
示例输出:
CATEGORY_ID PRODUCTION_MONTH PRODUCTION_YEAR 1 2 3 4 5 6 7 8 ...
1 1 2014 12 14 5 17 16 27 4 15
1 2 2014 18 56 27 34 9 19 10 0
1 1 2015 13 12 23 43 24 20 15 20
1 2 2015 36 11 36 13 9 1 25 10
...