gpt4 book ai didi

sql-server - SQL Server PIVOT 列数据

转载 作者:行者123 更新时间:2023-12-04 00:51:01 24 4
gpt4 key购买 nike

我有一个包含以下数据的表格:

DATE            Price
---------- ------
31/12/2009 10
31/12/2009 11
31/12/2009 12
30/12/2009 20
30/12/2009 21
30/12/2009 22
29/12/2009 30
29/12/2009 32
29/12/2009 31

我想按如下所示转换此数据:

31/12/2009  30/12/2009  29/12/2009
---------- ---------- ----------
10 10 10
11 11 11
12 12 12

但是日期列中的值是动态的。所以,我不知道如何通过 SQL Server Pivot 使用它。

能否请您告诉我如何获取这些数据。

下面给出了复制此场景的脚本:

CREATE TABLE TEMP(EffectiveDate DATETIME,Price INT)
INSERT INTO TEMP(EffectiveDate,Price)
SELECT GETDATE(),10
UNION ALL
SELECT GETDATE(),11
UNION ALL
SELECT GETDATE(),12
UNION ALL
SELECT GETDATE()-1,20
UNION ALL
SELECT GETDATE()-1,21
UNION ALL
SELECT GETDATE()-1,22
UNION ALL
SELECT GETDATE()-2,30
UNION ALL
SELECT GETDATE()-2,32
UNION ALL
SELECT GETDATE()-2,31

SELECT CONVERT(VARCHAR,EffectiveDATE,103) AS 'DATE',Price FROM Temp

提前致谢

马赫什

最佳答案

好的,正如我提到的,您的数据没有意义,但这也许可以提供帮助。

创建动态数据透视表的唯一方法是创建动态 sql。

此外,PIVOT 要求您使用聚合函数(SUM, AVG, COUNT)

好的,让我们看看这是否对您有帮助。

CREATE TABLE #TEMP  (EffectiveDate DATETIME,Price INT) 
INSERT INTO #TEMP(EffectiveDate,Price)
SELECT GETDATE(),10
UNION ALL
SELECT GETDATE(),11
UNION ALL
SELECT GETDATE(),12
UNION ALL
SELECT GETDATE()-1,20
UNION ALL
SELECT GETDATE()-1,21
UNION ALL
SELECT GETDATE()-1,22
UNION ALL
SELECT GETDATE()-2,30
UNION ALL
SELECT GETDATE()-2,32
UNION ALL
SELECT GETDATE()-2,31

DECLARE @Cols VARCHAR(MAX)
SELECT @cols = COALESCE(@cols + ',[' + colName + ']',
'[' + colName + ']')
FROM (
SELECT DISTINCT
CONVERT(VARCHAR,EffectiveDATE,103) colName
FROM #TEMP
) s
ORDER BY colName DESC

DECLARE @query VARCHAR(MAX)
SET @query = N'SELECT *
FROM
(SELECT CONVERT(VARCHAR,EffectiveDATE,103) AS ''DATE'',Price
FROM #TEMP) p
PIVOT
(
SUM(Price) FOR DATE IN
( '+
@cols +' )
) AS pvt'

EXECUTE(@query)


DROP TABLE #TEMP

关于sql-server - SQL Server PIVOT 列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1984306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com