有个表,记录如下
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对应的值就可以。
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对应的值就可以。
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 行受影响)
*/