【发布时间】:2023-04-04 08:31:01
【问题描述】:
假设我有一个这样的表 PRODUCT。
ProductName Amount
---------------------
Soap 1.10
Toothbrush 2.00
Towel 3.00
Soap 3.00
然后我使用 group by 得到它们的总和、平均值和计数。
SELECT
[ProductName],
SUM([Amount]) AS 'Sum',
COUNT(*) AS 'Count',
AVG([Amount]) AS 'Avg'
FROM Product
GROUP BY [ProductIdName]
我有这个结果。
ProductName Sum Count Avg
-----------------------------
Soap 4.10 2 2.05
Toothbrush 2.00 1 2.00
Towel 3.00 1 3.00
我想将 productname 列转换为类似的内容。
Type Soap Toothbrush Towel
------------------------------------------
Products Sum 4.10 2.00 3.00
Products Count 2 1 1
Products Average 2.05 2.00 3.00
我对每个聚合都使用了枢轴,然后全部联合,我认为这太冗长且效率不高?所以我在考虑是否有其他解决方案。
SELECT
'Products Sum' AS [Type],
*
FROM Product t
PIVOT(
SUM(Amount)
FOR [ProductName] IN (
[Soap],
[Toothbrush],
[Towel]
)
) AS pivot_table
UNION ALL
SELECT
'Products Count' AS [Type],
*
FROM Product t
PIVOT(
COUNT(Amount)
FOR [ProductName] IN (
[Soap],
[Toothbrush],
[Towel]
)
) AS pivot_table
...etc ( pivot AVG(Amount) )
【问题讨论】:
标签: sql sql-server tsql pivot