如何使用动态数据透视表使一个月中的日期显示为列 - 明确提到月
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用动态数据透视表使一个月中的日期显示为列 - 明确提到月相关的知识,希望对你有一定的参考价值。
DECLARE @month AS INT = 5
DECLARE @Year AS INT = 2016
;WITH N(N)AS
(SELECT 1 FROM(VALUES(1),(1),(1),(1),(1),(1))M(N)),
tally(N)AS(SELECT ROW_NUMBER()OVER(ORDER BY N.N)FROM N,N a)
SELECT ROW_NUMBER() OVER(ORDER BY N) AS SLNO ,N day,datefromparts(@year,@month,N) date INTO #CTETEST FROM tally
WHERE N <= day(EOMONTH(datefromparts(@year,@month,1)))
我想把这一天当作专栏。有人可以提供建议吗?
答案
试试这个:
DECLARE @DynammicTSQLStatement NVARCHAR(MAX)
,@DynamicPIVOTColumns NVARCHAR(MAX);
SET @DynamicPIVOTColumns = STUFF
(
(
SELECT ',[' + CAST([date] AS VARCHAR(12)) + ']'
FROM #CTETEST
ORDER BY [day]
FOR XML PATH('') ,TYPE
).value('.', 'NVARCHAR(MAX)')
,1
,1
,''
);
SET @DynammicTSQLStatement = N'
SELECT *
FROM
(
SELECT [date], SLNO
FROM #CTETEST
) DS
PIVOT
(
MAX([SLNO]) FOR [date] IN (' + @DynamicPIVOTColumns + ')
) PVT';
EXEC sp_executesql @DynammicTSQLStatement;
请注意,我假设您使用day
列订购列。它也需要从最终查询中排除。
以上是关于如何使用动态数据透视表使一个月中的日期显示为列 - 明确提到月的主要内容,如果未能解决你的问题,请参考以下文章