一条sql语句,能搞定吗?
姓名类别数量
小张112
小张221
小李12
小李24
小吴13
一条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 tbgroup 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 aset @sql = @sql + ' from tb group by 姓名 order by 姓名'exec(@sql) /*姓名 类别1数量 类别2数量 ---------- ----------- ----------- 小李 2 4小吴 3 0小张 12 21*/drop table tb