问题简化一下,表中有两个字段,name1、name2,主键忽略,如果name1中的某个值对应name2的所有值,那么表示name1的这个值是共有的,反之这是独有的,查出来的表格希望共有的name1只出现一行,独有的分别列出,比如:
name1 name2
A     1
A     2
A     3
A     4
B     1
B     3
C     1
C     2
C     3
C     4
D     4
查出的数据样子如下
A     全部
C     全部
B     1
B     3
D     4谢谢指点

解决方案 »

  1.   

    select distinct name1,'全部' from a0 where name1 in (select name1 from a0 group by name1 having(count(distinct name2)=4))
    union
    select  * from a0 where name1 not in (select name1 from a0 group by name1 having(count(distinct name2)=4))
    应该可以如果要一句语句只能这样了。
      

  2.   

    谢谢您的回复,4这个数字应该不是固定的,是否需要把4替换成(select count(name2) from a0)
      

  3.   

    select distinct name1,
           name2=case when (select count(*) from tb where name1=a.name1)=4
                      then '全部' else rtrim(name2) end
    from tb a 
      

  4.   

    select distinct name1,case when (select count(*) from tb where name1=t.name1)=(select count(distinct name2) from tb) then 'all' else name2 end
    from tb t 
      

  5.   

    上面的是不管name2有几项,都可以的