gpt4 book ai didi

sql-server - 没有聚合的 PIVOT。在多列上使用 Max

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

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

      Year   Cost   Price
2014 100 200
2015 150 300
2016 200 500

我需要将数据转置为:

      Category     2014    2015  2016
Cost 100 150 200
Price 200 300 500

我尝试在 Max(column) 上使用 Pivot,但意识到我只能对一列执行此操作。我不能使用 Max(cost)、Max(price)。

知道如何在 SQL 中实现这一点吗?

SELECT *
FROM (
SELECT Year,cost,price
FROM #t1) up
PIVOT (Max(cost) FOR year IN ([2014],[2015],[2016])) AS pvt

预期的输出是:

    Category       2014    2015  2016
Cost 100 150 200
Price 200 300 500

最佳答案

假设您想要动态的。诀窍是使用交叉应用

Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName([Year]) From Yourtable  Order by 1 For XML Path('')),1,1,'') 
Select @SQL = '
Select [Category],' + @SQL + '
From (
Select A.Year
,B.*
From YourTable A
Cross Apply (Values (''Cost'',A.Cost)
,(''Price'',A.Price)
) B (Category,Value)
) A
Pivot (max(Value) For [Year] in (' + @SQL + ') ) p'
Exec(@SQL);

返回

Category    2014    2015    2016
Cost 100 150 200
Price 200 300 500

如果不是 DYNAMIC 生成的 SQL

Select [Category],[2014],[2015],[2016]
From (
Select A.Year
,B.*
From YourTable A
Cross Apply (Values ('Cost',A.Cost)
,('Price',A.Price) ) B (Category,Value)
) A
Pivot (max(Value) For [Year] in ([2014],[2015],[2016]) ) p

如果它有助于可视化,带有交叉应用的子查询会生成这个

enter image description here

关于sql-server - 没有聚合的 PIVOT。在多列上使用 Max,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41306253/

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