我首选的方案是使用条件骨料像这样:
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
你应该为你的表提供更好的格式,所以他们实际上像表。 –
是的,对不起,我只是固定格式。 – user896917
我只是不知道从哪里开始让所有三个价格层级都显示在一行中。有任何想法吗? – user896917