一条sql语句,能搞定吗?
姓名 类别 数量
小张 1 12
小张 2 21
小李 1 2
小李 2 4
小吴 1 3
一条sql语句出来的结构是:
姓名 类别1数量 类别2数量
小张 12 21
小李 2 4
小吴 1 0
------解决方案--------------------select 姓名,
sum(case 类别 when 1 then 数量 else 0 end) '类别1数量',
sum(case 类别 when 2 then 数量 else 0 end) '类别2数量'
from tb
group by 姓名
------解决方案--------------------select 姓名,sum(case 类别 when '2' then 数量 else 0 end) '类别2数量' from 表 group by 姓名
------解决方案--------------------create table tb(姓名 varchar(10),类别 int,数量 int)
insert into tb values('小张', 1, 12)
insert into tb values('小张', 2, 21)
insert into tb values('小李', 1, 2 )
insert into tb values('小李', 2, 4 )
insert into tb values('小吴', 1, 3 )
go
--静态SQL,指类别只有1,2两种情况
select 姓名,
sum(case 类别 when 1 then 数量 else 0 end) '类别1数量',
sum(case 类别 when 2 then 数量 else 0 end) '类别2数量'
from tb
group by 姓名
order by 姓名
/*
姓名 类别1数量 类别2数量
---------- ----------- -----------
小李 2 4
小吴 3 0
小张 12 21
*/
--动态SQL,指类别不止1,2两种情况
declare @sql varchar(8000)
set @sql = 'select 姓名'
select @sql = @sql + ' , sum(case 类别 when ''' + cast(类别 as varchar) + ''' then 数量 else 0 end) [类别' + cast(类别 as varchar) + '数量]'
from (select distinct 类别 from tb) as a
set @sql = @sql + ' from tb group by 姓名 order by 姓名'
exec(@sql)
/*
姓名 类别1数量 类别2数量
---------- ----------- -----------
小李 2 4
小吴 3 0
小张 12 21
*/
drop table tb
------解决方案--------------------SQL code
create table tb(姓名 varchar(10),类别 int,数量 int)
insert into tb values('小张', 1, 12)
insert into tb values('小张', 2, 21)
insert into tb values('小李', 1, 2 )
insert into tb values('小李', 2, 4 )
insert into tb values('小吴', 1, 3 )
go
--静态SQL,指类别只有1,2两种情况
select 姓名,
sum(case 类别 when 1 then 数量 else 0 end) '类别1数量',
sum(case 类别 when 2 then 数量 else 0 end) '类别2数量'
from tb
group by 姓名
order by 姓名
/*
姓名 类别1数量 类别2数量
---------- ----------- -----------
小李 2 4
小吴 3 0
小张 12 21
*/
--动态SQL,指类别不止1,2两种情况
declare @sql varchar(8000)
set @sql = 'select 姓名'
select @sql = @sql + ' , sum(case 类别 when ''' + cast(类别 as varchar) + ''' then 数量 else 0 end) [类别' + cast(类别 as varchar) + '数量]'
from (select distinct 类别 from tb) as a
set @sql = @sql + ' from tb group by 姓名 order by 姓名'
exec(@sql)
/*
姓名 类别1数量 类别2数量
---------- ----------- -----------
小李 2 4
小吴 3 0
小张 12 21
*/
drop table tb