Скажем, у меня есть таблица ПРОДУКТА, подобная этой.
ProductName Amount
---------------------
Soap 1.10
Toothbrush 2.00
Towel 3.00
Soap 3.00
Затем я получаю их сумму, среднее значение и счет по группам.
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
Я хочу повернуть столбец с именем продукта в нечто вроде этого.
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) )