2015-04-17 67 views
0

如何将未知数量的行分组为单行,其中设置的列确定分组?如何将行分组为具有多个值的列?

我想

Group1 Group2 Group3 Val1 Val2 Val3 
=============================================== 
John  Smith  25  1  0  0 
John  Smith  25  0  6  0 
John  Smith  25  0  0  8 
Chris  Green  30  0  3  0 
Chris  Green  30  5  0  0 

转移到

Group1 Group2 Group3 Val1 Val2 Val3 
=============================================== 
John  Smith  25  1  6  8 
Chris  Green  30  5  3  0 
+1

GROUP BY组别1组2组3,对VAL1 SUM - VAL3 – jarlh

回答

2
declare @t table (group1 varchar(10),group2 varchar(20),group3 int,val1 int,val2 int,val3 int) 

insert into @t (group1,group2,group3,val1,val2,val3)values ('John','Smith',25,1,0,0), 
('John','Smith',25,1,6,0), 
('John','Smith',25,1,0,8), 
('Chris','Green',30,1,0,0), 
('Chris','Green',30,1,3,0), 
('Chris','Green',30,5,0,0) 

select distinct group1,group2,group3,MAX(val1),MAX(val2),MAX(val3) from @t 
group by group1,group2,group3 
ORDER BY group1 desc,group2 desc 
+1

为什么你使用'distinct'和'group by'? – Vasily

0
select Group1, Group2, Group3, SUM(val1), SUM(val2), SUM(val3) 
from tablename 
GROUP BY Group1, Group2, Group3 
+0

所以基本的SQL,所以我甚至没有想到它。 (另外,我也要工作。) – jarlh

+0

嘿,我花时间编辑问题,写评论,当没有人回答时,我甚至写了一个答案。我不认为这是低质量。 – jarlh

1

您可以使用group by条款与sum聚合函数,但对于这个工作,你必须保证val列的数据类型是数字数据类型(intdecimalsmallint等) 此外,任何null值将由sum功能

select Group1, Group2, Group3, sum(val1), sum(val2), sum(val3) 
from <table_name> 
group by Group1, Group2, Group3 
1

您查询本身有你的答案被忽略。你想分组你的gropunames并在其他列上执行SUm。所有你需要做一个简单的查询,其中

select sum(Val1),sum(Val2), sum( Val3) from table 
group by Group1 , Group2, Group3  

http://www.w3schools.com/sql/sql_groupby.asp

相关问题