如何根据标志位选择数据
表结构和数据:
a b c ....flg
111 1 1 ..... 1
111 1 1 ..... 0
222 1 1 ..... 1
333 1 1 ..... 0
选择数据的规则:选出所有flg为0的数据,根据a,b,c3个字段,如果有flg为0的记录,则需要选出其所有flg为1的记录,希望的结果如下:
a b c ....flg
111 1 1 ..... 1
111 1 1 ..... 0
333 1 1 ..... 0
哪位这样的查询如何写呢?谢谢。
------解决方案--------------------create table #test(a int,b int ,c int, flg int)
insert into #test
select 111,1,1,1 union all
select 111,1,1,0 union all
select 222,1,1,1 union all
select 333,1,1,0
select * from #test where flg = 0
union
select * from #test t where flg = 1 and exists(select 1 from #test where #test.a = t.a
and #test.b = t.b and #test.c = t.c and #test.flg <> t.flg)
drop table #test
------解决方案--------------------这样就行了
select * from ta as a
where exists(select 1 from ta where a=a.a and b=a.b and c=a.c and flg=0 )
------解决方案--------------------declare @a table(a int, b int, c int,flg int)
insert @a select 111, 1 ,1, 1
union all select 111 ,1, 1, 0
union all select 222, 1 ,1, 1
union all select 333 ,1, 1 , 0
select a.a,a.b,a.c,a.flg from @a a Inner Join (select * from @a where flg=0) b on a.a=b.a and a.b=b.b and a.c=b.c