sql - SQL SNOWFLAKE 中的 PIVOT 函数
问题描述
我有这个查询:
SELECT *
FROM TABLE_A
PIVOT(MIN(DATETIME) FOR TATUS IN ('claim', 'bought', 'returned'))
AS P (NUMBER_ID, COUNTRY)
我在 TABLE_A 中有 10 列,当我在 P 之后添加 PRIMARY KEY 时,因此:P (NUMBER_ID, COUNTRY) - 这不是在表中找到的前两列,它弄乱了表的整个顺序并将它们作为前两列具有不同列的值。
有谁知道如何解决这个问题?或者如何让 'claim'、'bought' 和 'return' 列不显示引用而无需在 PK 中添加它们?
解决方案
让我看看能不能重现你的问题。
分期数据:
create or replace temp table source as
select $1 id, $2 status, $3::date date, $4 rand, $5 country
from values(1, 'claimed', '2020-01-01'::date, 1.1, 'us'), (1, 'bought', '2020-01-02', 1.2, 'us'), (1, 'reverted', '2020-01-03', 1.3, 'us')
, (2, 'claimed', '2020-01-01', 1.4, 'cl'), (2, 'bought', '2020-01-02', 1.5, 'cl'), (2, 'reverted', '2020-01-03', 1.6, 'cl');
;
旋转:
SELECT *
FROM source
PIVOT(MIN(date) FOR status IN ('claimed', 'bought', 'reverted'))
AS P(id, country)
确实,这看起来不太好。
要修复它,请使用仅选择要在数据透视表中使用的列的子选择:
SELECT *
FROM (select id, country, status, date from source)
PIVOT(MIN(date) FOR status IN ('claimed', 'bought', 'reverted'))
AS P(id, country, claimed, bought, reverted)
请向我们展示您的样本数据和所需的结果以获得进一步的帮助。
推荐阅读
- python - 为什么我的 SSH 暴力破解器说正确的密码不正确?
- python - 如何在函数的for循环中使用多个条件?
- go - Go接口:接口未实现,即使它是
- python - 如何在 numpy 的唯一计数中包含值“零”
- ruby-on-rails - rails 设计 id 生成器
- android - Unity 2020.1.3f1 won't build Android Project...完全卡住无法解决这些错误
- javascript - 无法在离线模式下打开 html
- c++ - 这个 randfloat() 有什么作用?
- hbase - HBase CheckAndMutate 是原子的,它也是一致的吗?
- javascript - 剑道验证失败但没有错误