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

储存过程

2012-01-28 
求一个储存过程我有这样一个表:AA1AB2AC3BA4BB5BC6CA7CB8CC9现在我要生成如下的一个临时表,如何写SQL:S\DA

求一个储存过程
我有这样一个表:
A                       A                                 1
A                       B                                 2
A                       C                                 3
B                       A                                 4
B                       B                                 5
B                       C                                 6
C                       A                                 7
C                       B                                 8
C                       C                                 9


现在我要生成如下的一个临时表,   如何写SQL:

S\D                   A                                 B                         C
A                       1                                 2                         3
B                       4                                 5                         6
C                       7                                 8                         9

[解决办法]
参考:
create table test (姓名 char(10),课程 char(10),成绩 int)
go
insert test values( '张三 ', '语文 ',80)
insert test values( '张三 ', '数学 ',86)
insert test values( '张三 ', '英语 ',75)
insert test values( '李四 ', '语文 ',78)
insert test values( '李四 ', '数学 ',85)
insert test values( '李四 ', '英语 ',78)
select * from test
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ',sum(case 课程 when ' ' '+课程+ ' ' ' then 成绩 end) [ '+课程+ '] '


from (select distinct 课程 from test) as a
select @sql = @sql+ ' from test group by 姓名 '
exec(@sql)

drop table test

--结果
/*
姓名 课程 成绩
张三 语文 80
张三 数学 86
张三 英语 75
李四 语文 78
李四 数学 85
李四 英语 78

姓名 数学 英语 语文
李四 85 78 78
张三 86 75 80
*/
[解决办法]

create table T([S\D] char(1), col2 char(1), col3 int)
insert T select 'A ', 'A ', 1
union all select 'A ', 'B ', 2
union all select 'A ', 'C ', 3
union all select 'B ', 'A ', 4
union all select 'B ', 'B ', 5
union all select 'B ', 'C ', 6
union all select 'C ', 'A ', 7
union all select 'C ', 'B ', 8
union all select 'C ', 'C ', 9

declare @sql varchar(8000)
set @sql= 'select [S\D], '
select @sql=@sql+quotename(col2)+ '=max(case when col2= '+quotename(col2, ' ' ' ')+ ' then col3 end), '
from T
group by col2

select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from T group by [S\D] '
exec(@sql)

--result
S\D A B C
---- ----------- ----------- -----------
A 1 2 3
B 4 5 6
C 7 8 9

热点排行