【问题标题】:How to find the unmatched records where only partial records matches the conditions?如何找到只有部分记录符合条件的不匹配记录?
【发布时间】:2023-02-22 19:04:43
【问题描述】:

我有一张桌子 table_A

ID  EMP
1   9999
1   1
2   9999
2   2
2   3
3   9999
3   9999
3   4
3   4
3   4
4   9999
4   9999
4   9999
5   5
5   6

我想要 emp <> 9999 的记录,但这种情况不应满足所有 ID。所以我的预期输出将是

id emp
1   1
2   2
2   3
3   4
3   4
3   4

这里不存在 id 为 4 和 5 的记录,因为它们不同的 emp 值要么仅为 9999,要么为任何其他值而不是 9999

我试过但没有得到想要的结果:

SELECT ID, EMP
FROM table_a
WHERE ID IN (
  SELECT ID
  FROM table_a
  WHERE EMP <> 9999
  GROUP BY ID
  HAVING COUNT(DISTINCT CASE WHEN EMP <> 9999 THEN EMP END) > 0
)
AND EMP <> 9999

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    您想要显示 emp 不是 9999 的所有行,并且存在具有相同 id 且 emp = 9999 的行。

    select id, emp
    from table_a
    where emp <> 9999
    and id in (select id from table_a where emp = 9999)
    order by id, emp;
    

    (当然,如果您更喜欢,可以使用 EXISTS 子句代替 IN 子句。)

    【讨论】:

    • 这也将显示 id = 5 的结果;我不需要
    • 啊,对不起,你当然是对的,我弄反了。我已经更正了我的答案。
    猜你喜欢
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-31
    • 1970-01-01
    • 2011-09-12
    • 2014-08-20
    • 1970-01-01
    相关资源
    最近更新 更多