返回不在X但在X中的所有内容

时间:2013-06-12 13:17:50

标签: sql sql-server sql-server-2008-r2

我有一张桌子帐号:

DatabaseTable

我只想要只有帐户类型'分类帐'或'借记'的practiceid。如果他们有+其他任何我不想要它。

不知怎的,这并没有削减它:

SELECT PracticeId, accounttype 
FROM Account
WHERE AccountType IN('debit' , 'Ledger')

我只应该练习100和105。

我如何才能获得一个仅提供只包含分类帐或借记卡或两者的实践的查询?

3 个答案:

答案 0 :(得分:2)

您可以使用类似以下内容的内容来过滤同时包含practiceIddebit的{​​{1}},但之后使用WHERE子句删除任何包含其他内容的ledger practiceIds

accountTypes

SQL Fiddle with Demo。这将返回:

SELECT PracticeId, accounttype 
FROM Account 
WHERE AccountType IN('debit' , 'Ledger')
  and practiceid not in (select practiceid
                         from account
                         where AccountType not IN('debit' , 'Ledger'));

答案 1 :(得分:0)

单程

SELECT PracticeId
FROM   Account
GROUP BY PracticeId
HAVING MAX(CASE WHEN AccountType IN( 'debit', 'Ledger' ) THEN 0 ELSE 1 END) = 0

答案 2 :(得分:0)

我建议您首先选择具有不同accouttype的所有行,然后不要使用:

SELECT PracticeId, accounttype FROM Account 
WHERE id NOT IN(
SELECT id FROM Account
WHERE accounttype NOT in('debit' , 'Ledger')
)