【问题标题】:T-SQL, eliminating specific accounts via valueT-SQL,通过价值消除特定账户
【发布时间】:2014-03-04 16:12:43
【问题描述】:

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

+---------+-------+-------+--------+
| 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 的帐户。

【问题讨论】:

    标签: sql tsql subquery where-clause


    【解决方案1】:

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

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

    这将选择您的所有帐户,其中帐户仅包含 2。

    【讨论】:

    【解决方案2】:

    使用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
    )
    

    这将只选择没有其他记录与相同帐户但数字 2.如果列Account是标识符并且First+Last属于该表,则可以缩短它.

    【讨论】:

    • 您能否提供有关 WHERE NOT EXISTS 的更多信息?我在执行此操作时收到大量不正确的信息。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-10
    • 1970-01-01
    • 2013-04-17
    • 1970-01-01
    • 2016-11-30
    • 2018-01-25
    相关资源
    最近更新 更多