如何使用动态数据透视表使一个月中的日期显示为列 - 明确提到月

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列订购列。它也需要从最终查询中排除。

以上是关于如何使用动态数据透视表使一个月中的日期显示为列 - 明确提到月的主要内容,如果未能解决你的问题,请参考以下文章

如何使用数据透视在 Oracle 中将行转换为列

如何在 obiee 中显示一个月中所有日期的一个值?

SQL Server 中的数据透视表查询

透视动态列[重复]

使用 PostgreSQL 创建数据透视表

这是一个员工数据,我想使用数据透视将行数据转换为列