如何用左连接和 case 语句消除重复项?
How to eliminate duplicates with a left join and a case statement?
这里是问题代码的一个小样本:
SELECT
REFNUMBER
,CASE WHEN DESC = 'ABCD' THEN 'Y' ELSE '' END AS "DOESN'T WORK"
LEFT OUTER JOIN X.ZWNY Z
ON A.REFNUMBER = Z.REFNUMBER
非常基本的东西。但是,在某些情况下 "ABCD" 可以针对 table X.ZWNY 中的每个 REFNUMBER 出现多次,并且没有任何其他唯一标识符来限制结果。有没有办法把像 DISTINCT 之类的东西或类似的东西放在 return 只有第一次出现的 "ABCD" 中?如果我忽略了一些简单的事情,我深表歉意,但我似乎做不到。
不要使用 left join
。使用 exists
:
select refnumber,
(case when exists (select 1
from X.ZWNY Z
where A.REFNUMBER = Z.REFNUMBER and DESC = 'ABCD'
)
then 'Y' else ''
end) as BetterColumnName
from A;
注意:DESC
也是一个错误的列名,因为它是 SQL 保留字(用于 order by
)。
这里是问题代码的一个小样本:
SELECT
REFNUMBER
,CASE WHEN DESC = 'ABCD' THEN 'Y' ELSE '' END AS "DOESN'T WORK"
LEFT OUTER JOIN X.ZWNY Z
ON A.REFNUMBER = Z.REFNUMBER
非常基本的东西。但是,在某些情况下 "ABCD" 可以针对 table X.ZWNY 中的每个 REFNUMBER 出现多次,并且没有任何其他唯一标识符来限制结果。有没有办法把像 DISTINCT 之类的东西或类似的东西放在 return 只有第一次出现的 "ABCD" 中?如果我忽略了一些简单的事情,我深表歉意,但我似乎做不到。
不要使用 left join
。使用 exists
:
select refnumber,
(case when exists (select 1
from X.ZWNY Z
where A.REFNUMBER = Z.REFNUMBER and DESC = 'ABCD'
)
then 'Y' else ''
end) as BetterColumnName
from A;
注意:DESC
也是一个错误的列名,因为它是 SQL 保留字(用于 order by
)。