如何使用CASE实现表1有表2无记录时显示特殊状态单元格
问题解决方法
你现有查询的重复问题,是逻辑拆分错误导致的:第一部分内连接已经取出了两表匹配的记录,第二部分左连接返回Table1全量记录,其中匹配成功的记录会和第一部分重复,且两边返回的状态值不同,UNION无法自动去重,最终就会出现重复数据。
正确写法不需要用UNION,直接左连接加空值判断就能实现需求:
SELECT w.WIP1 AS WIPR, w.TimeStamp1 AS TIMESTAMPR, COALESCE(t.Status2, 'NOT RECEIVED') AS Status FROM Table1 w LEFT JOIN Table2 t ON w.WIP1 = t.WIP2
如果你的业务场景要求WIP和时间同时匹配才认为是同一条记录,可以在关联条件里追加时间匹配规则:
SELECT w.WIP1 AS WIPR, w.TimeStamp1 AS TIMESTAMPR, COALESCE(t.Status2, 'NOT RECEIVED') AS Status FROM Table1 w LEFT JOIN Table2 t ON w.WIP1 = t.WIP2 AND w.TimeStamp1 = t.TIMESTAMP2
逻辑说明
COALESCE函数会优先返回第一个非空参数:如果Table2有匹配记录就返回对应状态值,没有匹配记录时Status2为NULL,就返回你指定的NOT RECEIVED,最终返回结果和你期望的输出格式完全一致。
内容的提问来源于stack exchange,提问作者Miguel V
相关产品推荐
相关产品推荐

