在Redshift中转置非数值列

时间:2019-07-16 16:16:22

标签: sql amazon-web-services amazon-redshift transpose

我有一个数据集,如下所示: 索引,键,值

1, Description, Apple
2, Type, Orange
3, Desciption, Apple
4, Type, Pickle
5, Type, Orange 

我知道,如果Value是数字,可以这样做:

select Index,
max(Case when key = 'Description' then Value else null end)
max(case when key = 'type' the value else null end)
from table
group by Index

但是鉴于我的value列是一个字符串,因此不适用于我的用例。请记住此Redshift,因此它没有所有的postgres函数。 所需样本输出:

Index, Description,type
1, Apple, Orange
2, Apple, Pickle

1 个答案:

答案 0 :(得分:0)

您想要的输出没有意义,因为每个Index值只有一个输入行。因此,无法将行分组为组合值。

相反,如果您输入的数据是:

1, Description, Apple
1, Type, Delicious
2, Description, Banana
2, Type, Big
3, Description, Pineapple
3, Type, Prickly

然后您可以使用如下查询:

SELECT
  index,
  MAX(CASE WHEN description = 'Description' THEN type END) as description,
  MAX(CASE WHEN description = 'Type' THEN type END) as type
FROM food
GROUP BY index

输出为:

1   Apple      Delicious
2   Banana     Big
3   Pineapple  Prickly