在redshift中处理嵌套case语句

7z5jn7bk  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(435)

我正在写一个红移查询,它需要使用多个case语句。
借口:顾客可以与一个以上的组织有联系,如甜食或盐等。
问:我们必须检查是否首先挑选了与“sweets”组织相关联的客户,如果没有与“sweets”相关联的客户,那么我们必须在flag=1时获取该组织的id。
我必须使用红移中的case语句来推导结果。
有三个不同的表:客户表、组织表和3个表,它们决定了客户与组织的关联方式。
![在此处输入图像描述][1]
下面是我尝试过的代码,但是在执行这个之后,我仍然得到两个组织id,而不是一个应该是sweet org的id。

SELECT customer_id
     , organization_id
FROM      customer_details  AS customer
LEFT JOIN organization      AS org
       ON customer.customer_id 
      AND organization_id = CASE WHEN organization_id IN (SELECT organization_id
                                                            FROM organization_type
                                                           WHERE organization_type = 'SWEET')
                                 THEN organization_id
                            ELSE org.organization_id END
7kqas0il

7kqas0il1#

可以使用窗口函数:

select customer_id, organization_id
from (select c.customer_id, o.organization_id,
             row_number() over (partition by o.customer_id order by o.organization_type = 'SWEET' desc) as seqnum
      from customer_details c left join
           organization o 
           on c.customer_id = o.organization_id
     ) co
where seqnum = 1;

相关问题