我有一个表帐户:
我只想要只有帐户类型“分类帐”或“借记卡”的 practiceid。如果他们有那个+任何其他我不想要的。
不知何故,这并没有削减它:
SELECT PracticeId, accounttype
FROM Account
WHERE AccountType IN('debit' , 'Ledger')
我只应该得到 practiceid 100 和 105 回来。
我怎样才能有一个查询,它只会给我只有分类帐或借记卡或两者都有的做法?
我有一个表帐户:
我只想要只有帐户类型“分类帐”或“借记卡”的 practiceid。如果他们有那个+任何其他我不想要的。
不知何故,这并没有削减它:
SELECT PracticeId, accounttype
FROM Account
WHERE AccountType IN('debit' , 'Ledger')
我只应该得到 practiceid 100 和 105 回来。
我怎样才能有一个查询,它只会给我只有分类帐或借记卡或两者都有的做法?
您可以使用类似以下的内容来过滤practiceId
具有两者的内容debit
,ledger
然后使用 WHERE 子句删除任何practiceIds
具有 other 的内容accountTypes
:
SELECT PracticeId, accounttype
FROM Account
WHERE AccountType IN('debit' , 'Ledger')
and practiceid not in (select practiceid
from account
where AccountType not IN('debit' , 'Ledger'));
请参阅SQL Fiddle with Demo。这将返回:
| PRACTICEID | ACCOUNTTYPE |
----------------------------
| 100 | ledger |
| 100 | debit |
| 105 | ledger |
单程
SELECT PracticeId
FROM Account
GROUP BY PracticeId
HAVING MAX(CASE WHEN AccountType IN( 'debit', 'Ledger' ) THEN 0 ELSE 1 END) = 0
我建议您首先选择所有具有不同帐户类型的行,然后使用 not in:
SELECT PracticeId, accounttype FROM Account
WHERE id NOT IN(
SELECT id FROM Account
WHERE accounttype NOT in('debit' , 'Ledger')
)