首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

有点难的查询,该怎么解决

2012-02-13 
有点难的查询如表t1col1col2col3a1好a1好a2不好a2不好b2不好b2不好b1好b1好b3好b3好结果是:col1汇总1汇总1

有点难的查询
如表   t1
col1   col2   col3  
a           1       好      
a           1       好
a           2       不好
a           2       不好
b           2       不好
b           2       不好
b           1       好
b           1       好
b           3         好
b           3       好

结果是:
col1   汇总1     汇总1状态     汇总2     汇总2状态     汇总3       汇总3状态
a           2               好                 4                 不好           0                 好
b           4               不好             2                 好               6                 好

表就是这个结构.憋了两天没有出来.急切求助,望高手赐教!


[解决办法]
看不明白你题目什么意思
[解决办法]
整理下
如表 t1
col1 col2 col3
a 1 好
a 1 好
a 2 不好
a 2 不好
b 2 不好
b 2 不好
b 1 好
b 1 好
b 3 好
b 3 好

结果是:
col1 汇总1 汇总1状态 汇总2 汇总2状态 汇总3 汇总3状态
a 2 好 4 不好 0 好
b 4 不好 2 好 6 好
[解决办法]
create table tb(col1 varchar(10),col2 varchar(10),col3 varchar(10))
insert into tb values( 'a ', '1 ', '好 ' )
insert into tb values( 'a ', '1 ', '好 ')
insert into tb values( 'a ', '2 ', '不好 ')
insert into tb values( 'a ', '2 ', '不好 ')
insert into tb values( 'b ', '2 ', '不好 ')
insert into tb values( 'b ', '2 ', '不好 ')
insert into tb values( 'b ', '1 ', '好 ')
insert into tb values( 'b ', '1 ', '好 ')
insert into tb values( 'b ', '3 ', '好 ')
insert into tb values( 'b ', '3 ', '好 ')
go

--静态SQL
select col1 ,
sum(case when col2 = 1 and col3 = '好 ' then cnt else 0 end) '汇总1_好 ',
sum(case when col2 = 1 and col3 = '不好 ' then cnt else 0 end) '汇总1_不好 ',
sum(case when col2 = 2 and col3 = '好 ' then cnt else 0 end) '汇总2_好 ',
sum(case when col2 = 2 and col3 = '不好 ' then cnt else 0 end) '汇总2_不好 ',
sum(case when col2 = 3 and col3 = '好 ' then cnt else 0 end) '汇总3_好 ',
sum(case when col2 = 3 and col3 = '不好 ' then cnt else 0 end) '汇总3_不好 '
from
(
select col1,col2,col3,count(*) cnt from tb group by col1,col2,col3


) t
group by col1
/*
col1 汇总1_好 汇总1_不好 汇总2_好 汇总2_不好 汇总3_好 汇总3_不好
---- ------- ---------- ------- ---------- ------- -----------
a 2 0 0 2 0 0
b 2 0 0 2 2 0
(所影响的行数为 2 行)
*/

--动态SQL
declare @sql varchar(8000)
set @sql = 'select col1 '
select @sql = @sql + ' , sum(case when col2 = ' ' ' + col2 + ' ' ' and col3 = ' '好 ' ' then cnt else 0 end) [汇总 ' + col2 + '_好] '
+ ' , sum(case when col2 = ' ' ' + col2 + ' ' ' and col3 = ' '不好 ' ' then cnt else 0 end) [汇总 ' + col2 + '_不好] '
from (select distinct col2 from (select col1,col2,col3,count(*) cnt from tb group by col1,col2,col3) t ) as a
set @sql = @sql + ' from (select col1,col2,col3,count(*) cnt from tb group by col1,col2,col3) t group by col1 '
exec(@sql)
/*
col1 汇总1_好 汇总1_不好 汇总2_好 汇总2_不好 汇总3_好 汇总3_不好
---- ------- ---------- ------- ---------- ------- -----------
a 2 0 0 2 0 0
b 2 0 0 2 2 0
(所影响的行数为 2 行)
*/

drop table tb

热点排行