如何在红移中加入复杂的条件

Posted

技术标签:

【中文标题】如何在红移中加入复杂的条件【英文标题】:how to join with complecated condition in redshift 【发布时间】:2021-12-09 14:02:16 【问题描述】:

我有下表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

我想要的结果如下。我想在label=a and b 中加入 table1 和 table2 我想我必须在每种情况下加入两次..

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')

有没有什么好的方法可以做到这一点? 我想我们需要转置

谢谢

【问题讨论】:

【参考方案1】:

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

另请参阅此链接: Pivot for redshift database

【讨论】:

以上是关于如何在红移中加入复杂的条件的主要内容,如果未能解决你的问题,请参考以下文章

如何在红移光谱表中加载正确的数据?

如何在红移中获取过去 X 周的数据?

如何在红移中进行动态正则表达式匹配?

如何在红移光谱中创建一个外部表,其中文件位置每天都会改变?

在红移中评估的顺序是啥

如何执行与 SSAS 多维数据集在红移上的相同机制?