我正在使用MS SQL Server 2012
我已经尝试了AND,OR和括号的各种组合,但我无法通过此查询返回它应该的结果集。我可以通过查询来排除'已关闭%'但我无法通过OR条款排除' Name One'
子查询中的第二个AND OR子句不包括基于AccountClosedDate的条目。
SELECT
Distinct a.CompositeID,
a.ClientID,
a.ClientName,
a.CompositeName,
a.BranchName
FROM AllAccounts a
WHERE (a.Compositename NOT LIKE 'Closed%' OR a.CompositeName <> 'Name One')
AND EXISTS
(
SELECT DISTINCT CompositeID, CompositeName
FROM allaccounts c
WHERE c.CompositeID = a.CompositeID
AND (c.AccountClosedDate >= '1/1/2015' OR c.AccountClosedDate IS NULL))
ORDER BY a.CompositeName
示例输出我想要排除名称中已关闭的名称或名称一
CompositeID ClientID ClientName CompositeName BranchName
8801 5318 Client1 Name Two Firm1
7087 2311 Client2 Name Three Firm1
4817 2311 Client3 Name Four Firm1
11163 6863 Client4 Name Five Firm1
4031 2540 Client5 Closed3 Firm2
5079 2061 Client6 Closed2 Firrm2
5079 1149 Client7 Closed2 Firm3
5079 2249 Client8 Closed2 Firm3
5079 1873 Client9 Closed2 Firm3
5079 960 Client10 Name One Firm3
5079 1011 Client11 Name One Firm3
5079 1588 Client12 Name One Firm3
4090 1594 Client13 Name 6 Firm3
答案 0 :(得分:1)
如果要根据上述2个条件排除名称,则需要在子句中使用AND:
(a.Compositename NOT LIKE 'Closed%' AND a.CompositeName <> 'Name One')
当它检查每条记录时,只有在满足两个条件时才包含它。
让我们看一些记录:
Name AND OR
Name Two True True
Closed3 False True
Name One False True
如果您在条件之间加上OR,则包括所有不以“已关闭”字样开头的记录。或者不是“一个人”。所有记录都满足一个或另一个条件,因此包含所有记录。
所以&#39;已关闭3&#39;对于使OR-linked子句为真的第二个条件是正确的。同样,Name One
对于第一个是正确的,这使整个条款成立。