在雪花中旋转多个列

use*_*290 8 sql pivot snowflake-cloud-data-platform

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

这有效:

--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;
 
Run Code Online (Sandbox Code Playgroud)

但在添加额外聚合时我收到错误

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

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

任何指导表示赞赏

dem*_*glu 7

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)
Run Code Online (Sandbox Code Playgroud)

输出:

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

Run Code Online (Sandbox Code Playgroud)


Fel*_*ffa 5

根据PIVOTSnowflake的文档,你只能得到一个聚合:

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

[ ... ]
Run Code Online (Sandbox Code Playgroud)

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

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