我有一个方案,accountNo
不是Primary Key
且它有重复项,我想搜索priority
值为'0'
的帐户。 priority
字段是varchar
数据类型。下表是一个例子:
ID AccountNo Priority
1 20 0
2 22 0
3 30 0
4 20 1
5 25 0
6 22 0
我希望获得accounts
priority
值'0'
的重复或单个记录,条件是同一accountNo
的其他副本不具有priority
有任何'1'
值accountNo 20
。例如,priority
有2条记录,但其中一条'1'
的值为accountNo 22
,因此它不应该在输出中。对于priority
,虽然它有2条记录,但都有'0'
的值AccountNo
22
30
25
,因此它被视为结果之一。
priority
我遇到的问题是我只能找到'0'
accountNo
的帐户,但这些帐户很可能会重复priority
'1'
SELECT AccountNo
FROM CustTable
WHERE PRIORITY = '0'
GROUP BY AccountNo
{1}}。以下代码是我实现的:
df_h['v03']
答案 0 :(得分:0)
如果帐户优先级为0,则返回帐户,但仅当不存在具有优先级为1的相同AccountNo的其他行时。
SELECT DISTINCT AccountNo
FROM CustTable t1
WHERE PRIORITY = '0'
and not exists (select * FROM CustTable t2
where t1.AccountNo = t2.AccountNo
and t2.PRIORITY = '1')
答案 1 :(得分:0)
如果Priority
字段仅包含('0', '1')
中的值,请尝试以下操作:
SELECT AccountNo
FROM CustTable
GROUP BY AccountNo
HAVING MAX(Priority) = '0'
否则你可以使用:
SELECT AccountNo
FROM CustTable
GROUP BY AccountNo
HAVING COUNT(CASE WHEN Priority <> '0' THEN 1 END) = 0
答案 2 :(得分:0)
无论你使用哪种RDBMS,这都行不通,因为并非所有人都接受&#39;组。没有选择聚合函数(例如max())。 如果你提到你使用的RDBMS,那就更好了。
SELECT DISTINCT tmp.AccountNo
FROM
(SELECT AccountNo, MAX(Priority)
FROM CustTable
GROUP BY AccountNo
HAVING MAX(Priority) = '0'
) tmp