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--