如何在红移中加入复杂的条件
how to join with complecated condition in redshift
我有下表1
id name
1 A
3 B
和表2
id label value
1 a 10
1 b 11
1 c 12
2 a 13
2 b 14
2 c 15
3 a 16
3 b 17
3 c 18
我想要的结果是 following.I 我想在 label=a and b
中加入表 1 和表 2
我想我必须在每个条件下加入两次..
id name a b
1 A 10 11
3 B 16 17
我尝试了以下一个,但我只得到 label = a
的结果
select *
from table1
left join table2 using(id)
where label in ('a')
有什么好的方法可以实现吗?
我想我们需要转置
谢谢
Redshift 没有原生的数据透视函数,因此您需要使用 case 语句来实现:
SELECT
table1.id,
table1.name,
SUM(CASE WHEN table2.label = 'a' THEN table2.value END) AS a,
SUM(CASE WHEN table2.label = 'b' THEN table2.value END) AS b
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
GROUP BY table1.id, table1.name
另见 link:
Pivot for redshift database
我有下表1
id name
1 A
3 B
和表2
id label value
1 a 10
1 b 11
1 c 12
2 a 13
2 b 14
2 c 15
3 a 16
3 b 17
3 c 18
我想要的结果是 following.I 我想在 label=a and b
中加入表 1 和表 2
我想我必须在每个条件下加入两次..
id name a b
1 A 10 11
3 B 16 17
我尝试了以下一个,但我只得到 label = a
select *
from table1
left join table2 using(id)
where label in ('a')
有什么好的方法可以实现吗? 我想我们需要转置
谢谢
Redshift 没有原生的数据透视函数,因此您需要使用 case 语句来实现:
SELECT
table1.id,
table1.name,
SUM(CASE WHEN table2.label = 'a' THEN table2.value END) AS a,
SUM(CASE WHEN table2.label = 'b' THEN table2.value END) AS b
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
GROUP BY table1.id, table1.name
另见 link: Pivot for redshift database