【问题标题】:Pivot Multiple Columns in Snowflake在雪花中旋转多个列
【发布时间】:2021-05-06 02:43:38
【问题描述】:

无法旋转雪花中的多个列。

这行得通:

--DROP TABLE "PUBLIC".MONTHLY_SALES
create or replace table monthly_sales(empid int, amount int, month text)
    as select * from values
    (1, 10000, 'JAN'),
    (1, 400, 'JAN'),
    (2, 4500, 'JAN'),
    (2, 35000, 'JAN'),
    (1, 5000, 'FEB'),
    (1, 3000, 'FEB'),
    (2, 200, 'FEB'),
    (2, 90500, 'FEB'),
    (1, 6000, 'MAR'),
    (1, 5000, 'MAR'),
    (2, 2500, 'MAR'),
    (2, 9500, 'MAR'),
    (1, 8000, 'APR'),
    (1, 10000, 'APR'),
    (2, 800, 'APR'),
    (2, 4500, 'APR');
    
   
 SELECT * FROM monthly_sales
 pivot(
        sum(amount)
        for month in ('JAN', 'FEB', 'MAR', 'APR')
        ) AS p;
 

但我在添加其他聚合时收到错误

SELECT * FROM monthly_sales
 pivot(
        sum(amount)
        , count(amount)
        for month in ('JAN', 'FEB', 'MAR', 'APR')
        ) AS p;

QL 错误 [1003] [42000]:SQL 编译错误: 位置 5 处的语法错误第 4 行意外','。 位置 12 处的第 4 行语法错误意外 '('。 第 5 行第 45 位出现语法错误意外')'。

感谢任何指导

【问题讨论】:

    标签: sql pivot snowflake-cloud-data-platform


    【解决方案1】:

    Felipe 说得对,PIVOT 中只能使用一个聚合

    但根据您要实现的目标,此查询可能会有所帮助。

    SELECT 'SUM' RECORD_TYPE, * FROM (SELECT * FROM monthly_sales
     pivot(
            SUM(amount) 
            for month in ('JAN', 'FEB', 'MAR', 'APR')
            ) AS p)
    UNION ALL
    SELECT 'COUNT', * FROM (SELECT * FROM monthly_sales
     pivot(
            count(amount) 
            for month in ('JAN', 'FEB', 'MAR', 'APR')
            ) AS p)
    

    输出:

    Row RECORD_TYPE EMPID   'JAN'     'FEB'   'MAR'  'APR'
    1     SUM           1   10400      8000   11000  18000
    2     SUM           2   39500     90700   12000   5300
    3     COUNT         1       2         2       2      2
    4     COUNT         2       2         2       2      2
    
    

    【讨论】:

    • 谢谢。我被困在使功能工作而不是实际的解决方法上。感谢您的指导。
    • 很高兴它有帮助。
    【解决方案2】:

    根据 Snowflake 中PIVOT 的文档,只能得到一个聚合:

    SELECT ...
    FROM ...
       PIVOT ( <aggregate_function> ( <pivot_column> )
                FOR <value_column> IN ( <pivot_value_1> [ , <pivot_value_2> ... ] ) )
    
    [ ... ]
    

    如果您使用示例输入和输出发布不同的问题,我们可以尝试为此制定解决方案。

    至于这个问题,我不知道如何在关系表中表示两个不同的聚合。但至少我们可以回答您收到语法错误的原因:PIVOT 不支持多个聚合。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      相关资源
      最近更新 更多