将GROUP BY应用于SQL中的多列时如何执行数据透视

时间:2019-10-13 06:53:23

标签: sql sql-server

我知道当GROUP BY仅应用到一列上并且具有下面提到的示例代码时,如何执行Pivot表达式:

SELECT * FROM   
(
    SELECT 
        category_name, 
        product_id,
        model_year
    FROM 
        production.products p
        INNER JOIN production.categories c 
            ON c.category_id = p.category_id
) t 
PIVOT(
    COUNT(product_id) 
    FOR category_name IN (
        [Children Bicycles], 
        [Comfort Bicycles], 
        [Cruisers Bicycles], 
        [Cyclocross Bicycles], 
        [Electric Bikes], 
        [Mountain Bikes], 
        [Road Bikes])
) AS pivot_table;

在上述情况下,GROUP BY仅应用于“ category_name”列。

在“分组依据”要应用于多个列(例如category_name和model_year)的情况下,是否有人知道如何执行Pivot?

谢谢

2 个答案:

答案 0 :(得分:0)

只需使用两个PIVOT子句:

PIVOT(
    COUNT(product_id) 
    FOR category_name IN (
        [Children Bicycles], 
        [Comfort Bicycles], 
        [Cruisers Bicycles], 
        [Cyclocross Bicycles], 
        [Electric Bikes], 
        [Mountain Bikes], 
        [Road Bikes])
) AS P1
PIVOT(COUNT(product_id) FOR model_year IN ([2017], [2018], [2019])) AS P2

答案 1 :(得分:0)

只需使用条件聚合:

select sum(case when category = 'Children Bicycles' and
                     model_year = 2019
                then 1 else 0
           end) as Children_Bicycles_2019,
       sum(case when category = 'Children Bicycles' and
                     model_year = 2018
                then 1 else 0
           end) as Children_Bicycles_2018,
       . . .
from production.products p join
     production.categories c 
     on c.category_id = p.category_id