比如有表ta,有4个字段A,B,C,D
对A,B进行分组,如何用一个语句就可以把C,D的信息一起列出来
我以前的做法是两个步骤
1,
select A,B
into #tm
from ta
group by A,B having count(*)>12,
selec *
from ta
where A in (select A from tm) and B in (select B from tm)这样要建立临时表#tm,麻烦
如何用一个语句就可以实现

解决方案 »

  1.   

    我一般是用MAX(C),MAX(D),不知道是不是LZ要的
      

  2.   

    SELECT * FROM TB T WHERE EXISTS(SELECT 1 FROM TB WHERE A.=T.A AND B=T.B)
      

  3.   

    --楼主可以
    select a.*
    from(select A,B 
    from ta 
    group by A,B having count(*)>1 
    ) t join ta a on t.a=a.a
      

  4.   

    SELECT TA.*
    FROM (SELECT A,B FROM TA GROUP BY A,B HAVING COUNT(*)>1) T
      JOIN TA ON TA.A=T.A AND TA.B=T.B
      

  5.   


    简单举例是这样的;
    表taA B C D
    1 2 3 4
    1 2 6 8
    a b c d
    2 a b c
    2 a 6 9
    6 7 8 9我是想把表ta中字段A,B有重复的记录提取出来
    比如以上表全部记录中筛选出来应该是A B C D
    1 2 3 4
    1 2 6 8
    2 a b c
    2 a 6 9用我以前的方法可以实现,但需要用到临时表
    现在只想一个语句实现,当然实际的表中字段要多很多
      

  6.   

    DECLARE @TB TABLE([A] VARCHAR(1), [B] VARCHAR(1), [C] VARCHAR(1), [D] VARCHAR(1))
    INSERT @TB 
    SELECT '1', '2', '3', '4' UNION ALL 
    SELECT '1', '2', '6', '8' UNION ALL 
    SELECT 'a', 'b', 'c', 'd' UNION ALL 
    SELECT '2', 'a', 'b', 'c' UNION ALL 
    SELECT '2', 'a', '6', '9' UNION ALL 
    SELECT '6', '7', '8', '9'SELECT TA.*
    FROM (SELECT A,B FROM @TB GROUP BY A,B HAVING COUNT(*)>1) T
      JOIN @TB AS TA ON TA.A=T.A AND TA.B=T.B
    /*
    A    B    C    D    
    ---- ---- ---- ---- 
    1    2    3    4
    1    2    6    8
    2    a    b    c
    2    a    6    9
    */
      

  7.   

    select ta.* from ta 
    right join (select A,B from ta group by A,B having count(A)>1 and having count(B)>1) t on ta.A = t.A and ta.B = t.B
      

  8.   

    SELECT * FROM TB T WHERE EXISTS(SELECT 1 FROM TB WHERE A.=T.A AND B=T.B)就这个了,呵呵,猜到了
      

  9.   


    应该为
    select ta.* from ta
    right join (select A,B from ta group by A,B having count(A)>1 and count(B)>1) t on ta.A = t.A and ta.B = t.B
    不好意思
      

  10.   


    答案我在4楼写的 可以实现了。。DECLARE @TB TABLE([A] VARCHAR(1), [B] VARCHAR(1), [C] VARCHAR(1), [D] VARCHAR(1))
    INSERT @TB 
    SELECT '1', '2', '3', '4' UNION ALL 
    SELECT '1', '2', '6', '8' UNION ALL 
    SELECT 'a', 'b', 'c', 'd' UNION ALL 
    SELECT '2', 'a', 'b', 'c' UNION ALL 
    SELECT '2', 'a', '6', '9' UNION ALL 
    SELECT '6', '7', '8', '9'
    select a.*
    from(select A,B 
    from @TB  
    group by A,B having count(*)>1 
    ) t join @TB  a on t.a=a.a
    /*
    A    B    C    D
    ---- ---- ---- ----
    1    2    3    4
    1    2    6    8
    2    a    b    c
    2    a    6    9*/
      

  11.   

    create table ta(A varchar(1),B varchar(1),C varchar(1),D varchar(1))
    go     
    insert into ta values('1','2','3','4')
    insert into ta values('1','2','6','8')
    insert into ta values('a','b','c','d')
    insert into ta values('2','a','b','c')
    insert into ta values('2','a','6','9')
    insert into ta values('6','7','8','9')
    go
    select * from ta a where exists(select a,b from ta where a.a=ta.a and a.b=ta.b group by a,b having count(1)>1)
    go
    drop table ta;
    go//结果A    B    C    D    
    ---- ---- ---- ---- 
    1    2    3    4
    1    2    6    8
    2    a    b    c
    2    a    6    9
      

  12.   


    if object_id('test') is not null
      drop table test
    create table test
    ([A] VARCHAR(1), [B] VARCHAR(1), [C] VARCHAR(1), [D] VARCHAR(1))INSERT test 
    SELECT '1', '2', '3', '4' UNION ALL 
    SELECT '1', '2', '6', '8' UNION ALL 
    SELECT 'a', 'b', 'c', 'd' UNION ALL 
    SELECT '2', 'a', 'b', 'c' UNION ALL 
    SELECT '2', 'a', '6', '9' UNION ALL 
    SELECT '6', '7', '8', '9'select * from test
    t1,
    (select a,b
    from test group by a,b having sum(1) > 1
    ) t2 where t1.a = t2.a/**
    A    B    C    D    a    b    
    ---- ---- ---- ---- ---- ---- 
    1    2    3    4    1    2
    1    2    6    8    1    2
    2    a    b    c    2    a
    2    a    6    9    2    a(所影响的行数为 4 行)
    **/
      

  13.   

    DECLARE @TB TABLE([A] VARCHAR(1), [B] VARCHAR(1), [C] VARCHAR(1), [D] VARCHAR(1))
    INSERT @TB 
    SELECT '1', '2', '3', '4' UNION ALL 
    SELECT '1', '2', '6', '8' UNION ALL 
    SELECT 'a', 'b', 'c', 'd' UNION ALL 
    SELECT '2', 'a', 'b', 'c' UNION ALL 
    SELECT '2', 'a', '6', '9' UNION ALL 
    SELECT '6', '7', '8', '9'SELECT * FROM @TB T WHERE  EXISTS(SELECT 1 FROM @TB WHERE A=T.A AND B=T.B AND C<>T.C AND D<>T.D )
    (所影响的行数为 6 行)A    B    C    D    
    ---- ---- ---- ---- 
    1    2    3    4
    1    2    6    8
    2    a    b    c
    2    a    6    9(所影响的行数为 4 行)修改下就好了,
      

  14.   


    declare @table table (a int,b int,c int ,d int)
    insert into @table
    select 1,1 ,4,5 union all
    select 2,1 ,6,5 union all
    select 3,2 ,4,3 union all
    select 4,2 ,5,4 union all
    select 5,2 ,4,3 union all
    select 2,2 ,3,2select * from @table t
    where a=(select min(a) from @table where b=t.b) order by b/*
    a           b           c           d
    ----------- ----------- ----------- -----------
    1           1           4           5
    2           2           3           2
    */
      

  15.   

    --AB列有重复的取出来
    DECLARE @TB TABLE([A] VARCHAR(1), [B] VARCHAR(1), [C] VARCHAR(1), [D] VARCHAR(1))
    INSERT @TB 
    SELECT '1', '2', '3', '4' UNION ALL 
    SELECT '1', '2', '6', '8' UNION ALL 
    SELECT 'a', 'b', 'c', 'd' UNION ALL 
    SELECT '2', 'a', 'b', 'c' UNION ALL 
    SELECT '2', 'a', '6', '9' UNION ALL 
    SELECT '6', '7', '8', '9'select a.* from(
    select A,B from @TB  
    group by A,B 
    having count(*)>1 ) b 
    join @TB a on b.a=a.a
      

  16.   

    A B C D 
    1 2 3 4 
    1 2 6 8 
    2 a b c 
    2 a 6 9