【问题标题】:I cannot seem to get pivot to work in SQL Snowflake我似乎无法在 SQL Snowflake 中工作
【发布时间】:2020-12-14 17:05:03
【问题描述】:

所以我不知道如何让表格在 Snowflake 中旋转。我正在尝试在https://docs.snowflake.com/en/sql-reference/constructs/pivot.html 处为帮助页面建模。

在本例中,我只拉出 3 列,即步骤、正在测量的参数和值。尝试旋转它,使每个参数都在自己的列中。

源输出

step_name    Parameter_Name Value
----------------------------------
A            Item1          75
A            Item2          32
B            Item1          45
B            Item2          62

枢轴输出

step_name    Item1    Item2
--------------------------
 A            75       32
 B            45       62

sql 文本:

select 
    step_name, 
    PARAMETER_NAME,
    Value

from "METRO_TABLE" 
pivot (avg(Value) for PARAMETER_NAME in ('Item1', 'Item2'))
as p

WHERE 
and PARAMETER_NAME in ('Item1','Item2')

limit 50 

【问题讨论】:

  • 我写了一个雪花存储过程来获取雪花内部的动态枢轴,检查hoffa.medium.com/…

标签: sql pivot aggregate-functions snowflake-cloud-data-platform snowflake-schema


【解决方案1】:

使用 Snowflake 语法,下面的 SQL 给出了输出。

 Select *
  FROM METRO_TABLE
  PIVOT(sum(value) for parameter_name in ('Item1','Item2'))
  AS P (Step_Name,Item_1,Item_2)
  ORDER BY step_name;

【讨论】:

    【解决方案2】:

    只需使用条件聚合。该语法适用于大多数数据库,并且不需要记住每个供应商特定实现的细微变化。它也更灵活(尽管这对这个简单的用例没有影响):

    select
        step_name,
        max(case when parameter_name = 'Item1' then value end) Item1,
        max(case when parameter_name = 'Item2' then value end) Item2
    from metro_table
    where parameter_name in ('Item1', 'Item2')
    group by step_name
    

    在没有 order by 子句的情况下,我从您的查询中删除了 limit 子句:如果您想要 stable 行子集,则使用 both @ 987654325@和limit

    【讨论】:

    • 太棒了!这适用于这个。所以下一个问题,添加更多列似乎会引发错误。我将如何将其用于更大的查询?例如,拉 Lot_ID 列,其他标识列? SQL 编译错误:select 子句中位置 4 'metro_table.Lot_ID' 的错误行 2 既不是聚合也不是 group by 子句。
    • @surfer349:cmets 并不是真的要问新问题——相反,您可以ask a new question,提供适当的样本数据和所需的结果。也许您只想在select group by 子句中添加这些列?
    • 就这么简单!谢谢@GMB
    猜你喜欢
    • 2018-09-27
    • 2019-05-16
    • 1970-01-01
    • 2019-07-16
    • 2016-05-03
    • 2011-11-30
    • 2015-09-20
    • 2011-11-01
    • 1970-01-01
    相关资源
    最近更新 更多