日期:2014-05-17  浏览次数:20717 次

怎么写分类归纳的sql语句
比如有如下的表,很多行里,col1和col2内容是一样的,col3和col4各不一样。其中,col4里的内容要分两类,某个值的为一类,其他值的为另一类。怎么进行分类归总归总。例子如下
TA:
COL1,COL2,COL3,COL4
A001 A001  245   BC01
A001 A001  234   BC01
A001 A001  224   KFSC
A001 A001  123   SCDF
A001 A001  435   TGFR
A001 A001  453   TFGR
B001 B001  125   BC01
B001 B001  234   GFVB
B001 B001  321   EDVF
B001 B001  234   EDFV
……

要求,按CLO1分类汇总,同时,按COL4,把BC01和其他的分成2类。最后得到如下结果
COL1,COL2,BC01,OTHER
A001  A001  479  1235
B001  B001  125  789

该怎么写sql语句?

------解决方案--------------------
create table tb(COL1 varchar(10),COL2 varchar(10),COL3 int ,COL4 varchar(10))
insert into tb values('A001', 'A001',  245 ,  'BC01')
insert into tb values('A001', 'A001',  234 ,  'BC01')
insert into tb values('A001', 'A001',  224 ,  'KFSC')
insert into tb values('A001', 'A001',  123 ,  'SCDF')
insert into tb values('A001', 'A001',  435 ,  'TGFR')
insert into tb values('A001', 'A001',  453 ,  'TFGR')
insert into tb values('B001', 'B001',  125 ,  'BC01')
insert into tb values('B001', 'B001',  234 ,  'GFVB')
insert into tb values('B001', 'B001',  321 ,  'EDVF')
insert into tb values('B001', 'B001',  234 ,  'EDFV')
go

select col1 , col2,
       sum(case when col4 = 'BC01' then COL3 else 0 end) [BC01],
       sum(case when col4 <> 'BC01' then COL3 else 0 end) [OTHER]
from tb
group by col1 , col2

drop table tb

/*
col1       col2       BC01        OTHER       
---------- ---------- ----------- ----------- 
A001       A001       479         1235
B001       B001       125         789

(所影响的行数为 2 行)
*/

------解决方案--------------------
select col1,col2,sum(case when col4='BC01' then col3 else 0 end) as [bc01],sum(case when col4!='BC01' then col3 else 0 end) as [other] from tb group by col1 , col2

------解决方案--------------------
就是2L。用case语句筛选