DB2 sql group by/count不同列值

DB2 sql group by/count不同列值,sql,db2,Sql,Db2,如果我有一个具有如下值的表: ID SUBID FLAG ----------------- 1 1 1 1 2 (null) 2 3 1 2 3 (null) 3 4 1 4 5 1 4 6 (null) 5 7 0 6 8 (null) 7 9 1 我想获取所有ID,其中“FLAG”仅

如果我有一个具有如下值的表:

ID  SUBID    FLAG
-----------------
 1      1       1
 1      2  (null)
 2      3       1
 2      3  (null)
 3      4       1
 4      5       1
 4      6  (null)
 5      7       0
 6      8  (null)
 7      9       1
我想获取所有ID,其中“FLAG”仅设置为1,因此在本例中,查询将返回

ID  SUBID    FLAG
-----------------
 3      4       1
 7      9       1

如何实现这一点?

我没有要测试的db2实例,但这可能会起作用:

select t1.id, t1.subid, t1.flag
from yourtable t1
inner join
(
  select id 
  from yourtable 
  group by id
  having count(id) = 1
) t2
  on t1.id = t2.id
where t1.flag = 1;
试试这个:

SELECT * FROM flags where flag=1
and ID NOT in( SELECT ID FROM flags where flag !=1 OR flag IS NULL)

np,你实际上可以移除这个标志=如果flag列上的唯一选项为1且为空,则为1,但如果可以有一个“2”,则保留该选项,例如
flag
,根据OP的示例判断,也可以是
0
。如果有一行具有标志1,而另一行具有相同ID和标志0,则您的查询将无法正常工作。@AndriyM您是正确的,已修复-使用sql server fiddle--