sql - 我怎样才能最好地旋转我的红移表?
问题描述
我有一个用以metadata
下列调用的 Redshift 表:
ID | 钥匙 | 价值 |
---|---|---|
1001 | 代码1 | 我的价值 |
1001 | 代码2 | 其他 |
1001 | 代码3 | 完后还有 |
1002 | 代码1 | 新的一个 |
1002 | 代码2 | 这里 |
1002 | 代码3 | 最后的 |
1003 | 代码1 | 你好 |
1003 | 代码2 | 再见 |
1004 | 代码2 | 现在 |
1004 | 代码3 | 然后 |
我想要一个查询,将其返回为:
ID | 代码1 | 代码2 | 代码3 |
---|---|---|---|
1001 | 我的价值 | 其他 | 完后还有 |
1002 | 新的一个 | 这里 | 最后的 |
1003 | 你好 | 再见 | |
1004 | 现在 | 然后 |
请注意,并非所有 ID 都具有全部 3 个代码。有些人会有 1 或 2 个,其他人全部 3 个,还有一些人仍然没有。
解决方案
您可以使用条件聚合。假设您知道结果集中需要的列,您可以使用:
select id,
max(case when key = 'code1' then value end) as code1,
max(case when key = 'code2' then value end) as code2,
max(case when key = 'code3' then value end) as code3
from t
group by id;
如果您不知道具体的值并需要从数据中读取它们。. . 这更棘手。据我所知,Redshift 不支持动态 SQL。因此,您需要在数据库中查询不同的key
值,并使用您喜欢的语言将查询构造为字符串。然后,您可以执行该查询。