表位 SALESA B C D
2001 01 4 200
2001 02 2 400
2001 03 5 100
2002 01 6 300
2002 03 2 200要求用一条SQL语句写出以下形式(假设B固定有01 02 03)A 01 02 03
2001 50 200 20
2002 50 100 要求用存储过程写出以下形式(假设B不固定,可能会有04 05等等)
A 01 02 03 ...
2001 50 200 20 ...
2002 50 100 ...求各位大神,平时一般在这里看题,今天第一次问问题,希望有收获,谢谢
2001 01 4 200
2001 02 2 400
2001 03 5 100
2002 01 6 300
2002 03 2 200要求用一条SQL语句写出以下形式(假设B固定有01 02 03)A 01 02 03
2001 50 200 20
2002 50 100 要求用存储过程写出以下形式(假设B不固定,可能会有04 05等等)
A 01 02 03 ...
2001 50 200 20 ...
2002 50 100 ...求各位大神,平时一般在这里看题,今天第一次问问题,希望有收获,谢谢
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94
想变成(得到如下结果):
姓名 语文 数学 物理
---- ---- ---- ----
李四 74 84 94
张三 74 83 93
-------------------
*/create table tb(姓名 varchar(10) , 课程 varchar(10) , 分数 int)
insert into tb values('张三' , '语文' , 74)
insert into tb values('张三' , '数学' , 83)
insert into tb values('张三' , '物理' , 93)
insert into tb values('李四' , '语文' , 74)
insert into tb values('李四' , '数学' , 84)
insert into tb values('李四' , '物理' , 94)
go--SQL SERVER 2000 静态SQL,指课程只有语文、数学、物理这三门课程。(以下同)
select 姓名 as 姓名 ,
max(case 课程 when '语文' then 分数 else 0 end) 语文,
max(case 课程 when '数学' then 分数 else 0 end) 数学,
max(case 课程 when '物理' then 分数 else 0 end) 物理
from tb
group by 姓名--SQL SERVER 2000 动态SQL,指课程不止语文、数学、物理这三门课程。(以下同)
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 课程 when ''' + 课程 + ''' then 分数 else 0 end) [' + 课程 + ']'
from (select distinct 课程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql) select 姓名 , [语文] , [数学] , [物理] from tb
pivot(max(分数) for 课程 in([语文] , [数学] , [物理])) pvt
sum(case B when '01' then D/C else 0 end) as '[01]',
sum(case B when'02' then D/C else 0 end) as '[02]',
sum(case B when '03' then D/C else 0 end) as '[03]'
from #SALES group by A
declare @sql varchar(8000)
set @sql = 'select A '
select @sql = @sql + ' , max(case B when ''' + B + ''' then D/C else 0 end) [' + B + ']'
from (select distinct B from #SALES) as a
set @sql = @sql + ' from #SALES group by A'
exec(@sql)
2001 01 4 200
2001 02 2 400
2001 03 5 100
2002 01 6 300
2002 03 2 200要求用一条SQL语句写出以下形式(假设B固定有01 02 03)A 01 02 03
2001 50 200 20
2002 50 100 要求用存储过程写出以下形式(假设B不固定,可能会有04 05等等)
A 01 02 03 ...
2001 50 200 20 ...
2002 50 100 ...
谢谢
insert into tb values(2001 ,'01', 4 ,200)
insert into tb values(2001 ,'02', 2 ,400)
insert into tb values(2001 ,'03', 5 ,100)
insert into tb values(2002 ,'01', 6 ,300)
insert into tb values(2002 ,'03', 2 ,200)
go--sql 2000静态SQL,假设B固定有01 02 03
select A,
max(case b when '01' then ltrim(d) else '' end) [01],
max(case b when '02' then ltrim(d) else '' end) [02],
max(case b when '03' then ltrim(d) else '' end) [03]
from tb
group by A
/*
A 01 02 03
----------- ------------ ------------ ------------
2001 200 400 100
2002 300 200(所影响的行数为 2 行)
*/--sql 2000动态SQL,假设B不固定,可能会有04 05等等
declare @sql varchar(8000)
set @sql = 'select A '
select @sql = @sql + ' , max(case b when ''' + b + ''' then ltrim(d) else '''' end) [' + b + ']'
from (select distinct b from tb) as a
set @sql = @sql + ' from tb group by A'
exec(@sql)
/*
A 01 02 03
----------- ------------ ------------ ------------
2001 200 400 100
2002 300 200
*/drop table tb
create table tb(A int,B varchar(10),C int,D int)
insert into tb values(2001 ,'01', 4 ,200)
insert into tb values(2001 ,'02', 2 ,400)
insert into tb values(2001 ,'03', 5 ,100)
insert into tb values(2002 ,'01', 6 ,300)
insert into tb values(2002 ,'03', 2 ,200)
go--sql 2000静态SQL,假设B固定有01 02 03
select A,
max(case b when '01' then ltrim(D/C) else '' end) [01],
max(case b when '02' then ltrim(D/C) else '' end) [02],
max(case b when '03' then ltrim(D/C) else '' end) [03]
from tb
group by A
/*
A 01 02 03
----------- ------------ ------------ ------------
2001 50 200 20
2002 50 100
*/--sql 2000动态SQL,假设B不固定,可能会有04 05等等
declare @sql varchar(8000)
set @sql = 'select A '
select @sql = @sql + ' , max(case b when ''' + b + ''' then ltrim(D/C) else '''' end) [' + b + ']'
from (select distinct b from tb) as a
set @sql = @sql + ' from tb group by A'
exec(@sql)
/*
A 01 02 03
----------- ------------ ------------ ------------
2001 50 200 20
2002 50 100(所影响的行数为 2 行)
*/drop table tb