gpt4 book ai didi

sql-server - SQL Server 将多行合并为一列

转载 作者:行者123 更新时间:2023-12-03 12:37:52 24 4
gpt4 key购买 nike

我正在尝试将多行合并为一列。我有一张 table :

COST_ID PRICE_ID PRICE_TIER   COST
1 4 1 850.00
2 4 2 950.00
3 4 3 1000.00
4 7 1 250.00
5 7 2 275.00
6 7 3 300.00

我想为每个 price_id 输出一行,它应该看起来像这样:

ID PriceID C1ID C1Cost   C2ID  C2Cost C3ID  C3Cost
1 4 1 850.00 2 950.00 3 1000.00
2 7 4 250.00 5 275.00 6 300.00

感谢您的帮助。

最佳答案

我首选的解决方案是使用条件聚合,如下所示:

SELECT  ROW_NUMBER() OVER(ORDER BY Price_ID) [ID],
Price_ID,
MIN(CASE WHEN Price_Tier = 1 THEN Cost_ID END) [C1ID],
MIN(CASE WHEN Price_Tier = 1 THEN Cost END) [C1Cost],
MIN(CASE WHEN Price_Tier = 2 THEN Cost_ID END) [C2ID],
MIN(CASE WHEN Price_Tier = 2 THEN Cost END) [C2Cost],
MIN(CASE WHEN Price_Tier = 3 THEN Cost_ID END) [C3ID],
MIN(CASE WHEN Price_Tier = 3 THEN Cost END) [C3Cost]
FROM T
GROUP BY Price_ID

然而,这也可以通过 SQL-Server 的 PIVOT 函数来完成。但是,它需要一个 UNION,因为 PIVOT 不允许在单个 PIVOT 中进行多个聚合。

SELECT  ROW_NUMBER() OVER(ORDER BY Price_ID) [ID],
*
FROM ( SELECT Price_ID, 'C' + CONVERT(VARCHAR, Price_Tier) + 'Cost' [Price_Tier], MIN(Cost) [Value]
FROM T
GROUP BY Price_ID, Price_Tier
UNION ALL
SELECT Price_ID, 'C' + CONVERT(VARCHAR, Price_Tier) + 'ID' [Price_Tier], MIN(Cost_ID) [Value]
FROM T
GROUP BY Price_ID, Price_Tier
) data
PIVOT
( MAX(Value)
FOR Price_Tier IN ([C1ID], [C1Cost], [C2ID], [C2Cost], [C3ID], [C3Cost])
) Pvt

Demonstrative SQL Fiddle

关于sql-server - SQL Server 将多行合并为一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10685914/

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