SQL多表JOIN及CASE逻辑实现:WORK与ORG表查询问题求助
实现方案
原有SQL语法问题修正
你之前写的SQL存在几处语法错误,先修复:
- select子句中
A.WORK_ZIP后缺少逗号分隔字段 - 子查询中
WORK_ZIP后缺少逗号,count(distinct)函数内多了多余的逗号和无效的表别名A.前缀
最终关联ORG表的SQL
使用LEFT JOIN关联ORG表,以两张表共有的ARB_REF作为关联键,通过判断关联结果是否非空输出result字段值,同时带出机构名称:
select A.ARB_REF, A.WORK_STREET, A.WORK_NUM, A.WORK_ZIP, case when B.B = 1 then 'OK' else 'not ok' end as street_zip_check, case when O.ARB_REF is not null then 'yes' else 'no' end as result, O.NAME from WORK A join (select WORK_STREET, WORK_ZIP, count(distinct WORK_NUM) as B from WORK group by WORK_STREET, WORK_ZIP ) B on B.WORK_STREET = A.WORK_STREET and B.WORK_ZIP = A.WORK_ZIP left join ORG O on A.ARB_REF = O.ARB_REF
如果不需要关联失败的记录显示NAME为NULL,可以把O.NAME替换为case when O.ARB_REF is not null then O.NAME else '' end as NAME即可。
内容的提问来源于stack exchange,提问作者Tick _Tack
相关产品推荐
相关产品推荐

