如何在SQL中选择一列中的值没有任何重复项(即DISTINCT)而另一列中的值具有重复项的行?



这是在 DB2 中。我想编写查询,导致行中一个指定列中的值是不同的,但第二列中的值也不是不同的。

下面是一个示例数据集:

COL1     COL2          COL3
149999      Y          34567
149999      N          34567
148888      N          34567
147777      N          45678
156666      Y          56789
156666      N          56789
155555      N          56789

假设 COL1 是我想要不同的列,而 COL3 是我想要重复的列。

然后,我需要的查询将给出以下结果:

COL1        COL2         COL3
148888      N            34567
155555      N            56789

因为 COL1 在这些行中是唯一的,但 COL3 不是

抱歉,如果我解释得不好,我是 SQL/DB2 的初学者

窗口函数是一种方法:

select t.*
from (select t.*,
             count(*) over (partition by col1) as cnt_col1,
             count(*) over (partition by col3) as cnt_col3
      from t
     ) t
where cnt_col1 = 1 and cnt_col3 > 1;

如果由于某种原因您不想使用窗口函数。

SELECT * 
  FROM TABLE_1
 WHERE EXISTS -- unique field
         ( SELECT 1
             FROM TABLE_1 T2
            WHERE T1.Field2 = T2.Field2
            GROUP
               BY T2.Field2
           HAVING COUNT(1) = 1
         )
   AND EXISTS -- nonunique field
         ( SELECT 1
             FROM TABLE_1 T3
            WHERE T1.Field3 = T3.Field3
            GROUP
               BY T3.Field3
           HAVING COUNT(1) > 1
         )

相关内容

  • 没有找到相关文章

最新更新