T-SQL,通过价值消除特定帐户

时间:2014-03-04 16:12:43

标签: sql tsql subquery where-clause

我想删除除2之外包含任何其他值的所有帐户,然后执行计数。应用where Number = 2将包括吉姆。我不想要吉姆,我只想要约翰。例;这应该通过。

+---------+-------+-------+--------+
| Account | First | Last  | Number |
+---------+-------+-------+--------+
| 17342   | John  | Locke | 2      |
| 17342   | John  | Locke | 2      |
| 17342   | John  | Locke | 2      |
+---------+-------+-------+--------+

这不应该。

+---------+-------+------+--------+
| Account | First | Last | Number |
+---------+-------+------+--------+
| 20342   | Jim   | Look | 3      |
| 20342   | Jim   | Look | 2      |
| 20342   | Jim   | Look | 1      |
+---------+-------+------+--------+

在此之后,我想在单独的查询中找到所有没有值为2的帐户。

2 个答案:

答案 0 :(得分:1)

有几种方法可以做到这一点。一种方法(如果你没有太多的数据)将是这样的:

SELECT
    *
FROM Accounts
WHERE Account NOT IN (
    SELECT
        Account
    FROM Accounts
    WHERE Number <> 2
)

这会选择帐户中只包含2的所有帐户。

答案 1 :(得分:1)

使用NOT EXISTS

SELECT Account, First, Last, Number  
FROM dbo.Tablename t
WHERE t.Number = 2
AND NOT EXISTS
(
   SELECT 1 FROM dbo.Tablename t2
   WHERE t.Account=t2.Account AND t.First=t2.First AND t.Last=t2.Last
   AND   t2.Number <> 2
)

这将仅选择没有其他记录具有相同帐户但数字&lt;&gt;的记录。 2.如果列Account是标识符且First + Last属于该表,则可以缩短它。