原谅问题的标题,但这就是我所拥有的 -
STAGING_CUST_ACCT(PARTY_KEY,NAME,TAX_ID,......)
一些示例数据
1,John,234345
2,Tom,234345
1,Ken,000000
.
.
.
没有限制。我需要编写一个查询来拉出所有具有不同party_key
但tax_id
tax_id
且NULL
不是blank
或select distinct a.party_key,a.tax_id from STAGING_CUST_ACCT a
join STAGING_CUST_ACCT b
on a.tax_id = b.tax_id
and a.party_key <> b.party_key
where ISNULL(a.tax_id,'')<>''
AND a.tax_id is not null
{{1}}
我确实得到了结果,但我不确定逻辑的实现是否正确。如果有更简单的方法来编写上述查询,有人可以确认/纠正我吗?
答案 0 :(得分:0)
你的where子句(包括和)似乎是不必要的。 &#34; JOIN&#34;暗示内部联接,它只包含匹配的记录,nulls不会加入其他空值,所以
select distinct a.party_key,a.tax_id
from STAGING_CUST_ACCT a
inner join STAGING_CUST_ACCT b
on a.tax_id = b.tax_id
and a.party_key <> b.party_key
应该给出相同的结果(但你应该确认:P)
编辑哦,而不是空白错过那部分
select distinct a.party_key,a.tax_id
from STAGING_CUST_ACCT a
inner join STAGING_CUST_ACCT b
on a.tax_id = b.tax_id
and a.party_key <> b.party_key
and a.tax_id <> ''
答案 1 :(得分:0)
select count(*), a.party, a.tax_id
from STAGING_CUST_ACCT a
join STAGING_CUST_ACCT b
on a.tax_id = b.tax_id
GROUP By a.party, a.tax_id
Having count(*) = 1
where a.tax_id is not null