【问题标题】:Exclude rows with a column containing a value if multiple rows exist for如果存在多行,则排除具有包含值的列的行
【发布时间】:2019-05-17 04:50:44
【问题描述】:

表有

User   Value
john   284
john   200
john   5
sally  245
sally  180
sally  10
bill   90
bill   1000
bill   284
greg   10
greg   90
greg   2000

例如,如果 User 的值为 284,那么我希望结果集中不包括他 我不确定如何检查用户的所有行以查看是否存在 284 值,然后如果存在则不显示该用户在结果集中。结果集应该是不同的。

最终结果集应该是

User
greg
sally

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    使用not exists:

    select distinct
        user
    from
        users u
    where
        not exists (
           select
               1
           from
               users u2
           where
               u2.user = u.user
               and u2.value = 284
        )
    

    它的作用是从users 表中获取所有用户,这些用户在users 表中没有值284 的行。您也可以将exists 作为相反的对象(仅查找具有284 值的用户)。

    此外,在select 上使用distinct 将返回的用户限制为其唯一值。

    【讨论】:

    • 我试过:从 vw_Links e1 中选择用户、描述、linkId,其中用户在('john'、'sally'、'bill'、'george')并且不存在(从 tbl_Users e2 中选择 1 e2.User = e1.User 和重要性 > 3 和 linkId in ('283','284','285') ) 由 e1.User ASC 排序;它仍然返回所有用户的所有行(即使是 284 用户)。
    • e2中的重要性和linkid吗?最好是明确的并指定 e1。或 e2。视情况而定。
    • 它应该做的口头描述是为用户显示不同的行,在用户的众多行中没有 284。
    【解决方案2】:
        Select distinct User from table
        where User not in ( Select User from table
        where value =284)
    

    【讨论】:

    • 好的,我可以使用最后一个示例,并根据我的需要进行操作。谢谢大家!
    • 顺便说一下,如果表中有一行用户的值为 NULL(其中 value = 284),这将不起作用。如果有,您可以在子选择的 where 子句中包含 AND User IS NOT NULL。
    【解决方案3】:

    另一种选择是自联接:

    SELECT DISTINCT u1.[User]
    FROM users u1
    LEFT OUTER JOIN users u2 ON u2.[User] = u1.[User] AND u2.Value = 284
    WHERE u2.[User] IS NULL
    

    【讨论】:

      【解决方案4】:

      您可以按用户使用分组,还可以使用 value != 284 计算有多少用户

      这里是 SQL

      Select   `User`
      ,count(*)- SUM(CASE WHEN `Value` != 284 THEN 1 ELSE 0 END) 284Val
      from table
      group by `User`
      having 284Val = 0;
      

      【讨论】:

        猜你喜欢
        • 2018-08-18
        • 2021-09-17
        • 2020-05-08
        • 1970-01-01
        • 1970-01-01
        • 2012-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多