在SQL

时间:2016-03-15 14:01:17

标签: sql

我有一个方案,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']

3 个答案:

答案 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