sql - 我似乎无法在 SQL Snowflake 中工作

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

所以我不知道如何让表在 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 

最佳答案

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

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 子句:如果您想要一个稳定行子集,然后使用两者 order bylimit

关于sql - 我似乎无法在 SQL Snowflake 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63588450/

相关文章:

php - 如何解决 PostgreSQL/PHP 中的 "Resource ID #8"错误消息?

mysql - 数据透视表和基于值的聚合

sql-server-2008 - Sql Server 2008 报告服务 : Using two dataset error

mysql - 具有 2 个值的主键的 SQL 外键

sql - 在 SQL Server 中添加 +- 1 年

sql-server - 使用字符串作为聚合函数值的数据透视表

mysql - SQL 仅选择列上具有最大值的行

mysql - 如何最佳地进行 GROUP BY 并按两列进行计数?

sql - 从另一个 sp 获取 sp 值

sql - 如何统计oracle每月返回的行数?