有个表,记录如下
c1      c2    c3   c4
20-1    张    3    4
20-1-2  张    3    2
20-2-1  王    1    1
20-2-2  王    3    2
我现在要针对c2列分组,对c3,c4列求和。但是显示的时候 想这样显示
a1    a2     a3  a4
20-1  张     6    6
20-2  王     4    3 如果不显示c1列,我会写 select c2 ,sum(c3),sum(c4) group by c2。但是如果加上 c1列 如何做呢 ,
补充 a1那一列 ,张 那个记录 可以显示20-1或者20-1-2,王 对应的那个a1显示20-2-1或者20-2-2都行。只要显示对应姓名中任何一个c1对应的值就可以。

解决方案 »

  1.   

    select min(c1) as c1,c2 ,sum(c3) as c3,sum(c4) as c4 from tb group by c2
      

  2.   

    create table tb(c1 varchar(20),c2 nvarchar(10),c3 int,c4 int)
    insert into tb select '20-1','张',3,4
    insert into tb select '20-1-2','张',3,2
    insert into tb select '20-2-1','王',1,1
    insert into tb select '20-2-2','王',3,2
    go
    select a1,a2,SUM(c3) as a3,SUM(c4)as a4 from(
    select LEFT(c1,CHARINDEX('-',c1+'-',CHARINDEX('-',c1)+1)-1)as a1,c2 as a2,c3,c4 from tb
    )t group by a1,a2
    go
    drop table tb
    /*
    a1                   a2         a3          a4
    -------------------- ---------- ----------- -----------
    20-2                 王          4           3
    20-1                 张          6           6(2 行受影响)
    */