通过方法构造出前面的语句
declare @aa varchar(5000)
set @aa='select ...case ....end from ... '
......exec(@aa)
declare @aa varchar(5000)
set @aa='select ...case ....end from ... '
......exec(@aa)
解决方案 »
- 求救!mssql2005本地备份远端数据库出错!!!
- 如何同步两台不能互连的电脑中的数据库数据?
- 查询语句问题,不会写?具体请进来看看!
- 请指点:用sql语句怎么同时显示统计截至到当前行的所有总额?
- 菜鸟问题:如何规定sqlserver表中日期字段的格式?
- 安装程序时数据库怎样导入的问题
- 如何将sql server 2000数据库中数据表的所有者改名?
- 在线等待-----sql数据库现在打不开该怎么办?
- 怎么将3个列数相同的表的数据select到一个表中,列数不变。
- 我写的一个DNA比对算法,大家提点意见,能不能再加快点速度
- 求PowerDesiger电子版书籍,中英文都OK~~~
- 我搜所了所有的论坛贴子,感觉都不能解决问题。
set @sql='select * from (SELECT 姓名,'declare cursor1 cursor for select 科目 from 表 group by 科目
declare
@i varchar(100)
open cursor1
fetch cursor1 into @i
while @@fetch_status=0
begin
set @sql=@sql+'SUM(CASE 科目 WHEN '+@i+' THEN 分数 ELSE 0 END) '+@i+' '
fetch cursor1 into @i
end
close cursor1
deallocate cursor1set @sql=@sql+' FROM 表 GROUP BY 姓名) AA'exec(@sql)
insert into mytable values('A','数学', 10)
insert into mytable values('A','语文', 20)
insert into mytable values('A','历史', 30)
insert into mytable values('B','化学', 40)
insert into mytable values('B','数学', 50)
insert into mytable values('B','历史', 60)
insert into mytable values('C','历史', 70)
insert into mytable values('D','英语', 80)
insert into mytable values('D','数学', 90)
insert into mytable values('E','体育', 88.8)
insert into mytable values('F','政治', 100)
go
-------------------------------------------------------------------------
declare @sql varchar(8000)
set @sql = 'select 姓名,'select @sql = @sql + 'sum(case 科目 when '''+科目+'''
then 分数 else 0 end) as '''+科目+''','
from (select distinct 科目 from mytable) as aselect @sql = left(@sql,len(@sql)-1) + ' from mytable group by 姓名'exec(@sql)
go
-------------------------------------------------------------------------
以下是结果姓名 化学 历史 数学 体育 英语 语文 政治
A .00 30.00 10.00 .00 .00 20.00 .00
B 40.00 60.00 50.00 .00 .00 .00 .00
C .00 70.00 .00 .00 .00 .00 .00
D .00 .00 90.00 .00 80.00 .00 .00
E .00 .00 .00 88.80 .00 .00 .00
F .00 .00 .00 .00 .00 .00 100.00
insert into mytable values('A','数学', 10)
insert into mytable values('A','语文', 20)
insert into mytable values('A','历史', 30)
insert into mytable values('B','化学', 40)
insert into mytable values('B','数学', 50)
insert into mytable values('B','历史', 60)
insert into mytable values('C','历史', 70)
insert into mytable values('D','英语', 80)
insert into mytable values('D','数学', 90)
insert into mytable values('E','体育', 88.8)
insert into mytable values('F','政治', 100)
go
-------------------------------------------------------------------------
declare @sql varchar(8000)
set @sql = 'select 姓名,'select @sql = @sql + 'sum(case 科目 when '''+科目+'''
then 分数 else 0 end) as '''+科目+''','
from (select distinct 科目 from mytable) as aselect @sql = left(@sql,len(@sql)-1) + ' from mytable group by 姓名'exec(@sql)
go
-------------------------------------------------------------------------
以下是结果姓名 化学 历史 数学 体育 英语 语文 政治
A .00 30.00 10.00 .00 .00 20.00 .00
B 40.00 60.00 50.00 .00 .00 .00 .00
C .00 70.00 .00 .00 .00 .00 .00
D .00 .00 90.00 .00 80.00 .00 .00
E .00 .00 .00 88.80 .00 .00 .00
F .00 .00 .00 .00 .00 .00 100.00
insert into mytable values('A','数学', 10)
insert into mytable values('A','语文', 20)
insert into mytable values('A','历史', 30)
insert into mytable values('B','化学', 40)
insert into mytable values('B','数学', 50)
insert into mytable values('B','历史', 60)
insert into mytable values('C','历史', 70)
insert into mytable values('D','英语', 80)
insert into mytable values('D','数学', 90)
insert into mytable values('E','体育', 88.8)
insert into mytable values('F','政治', 100)
go
-------------------------------------------------------------------------
declare @sql varchar(8000)
set @sql = 'select 姓名,'select @sql = @sql + 'sum(case 科目 when '''+科目+'''
then 分数 else 0 end) as '''+科目+''','
from (select distinct 科目 from mytable) as aselect @sql = left(@sql,len(@sql)-1) + ' from mytable group by 姓名'exec(@sql)
go
-------------------------------------------------------------------------
以下是结果姓名 化学 历史 数学 体育 英语 语文 政治
A .00 30.00 10.00 .00 .00 20.00 .00
B 40.00 60.00 50.00 .00 .00 .00 .00
C .00 70.00 .00 .00 .00 .00 .00
D .00 .00 90.00 .00 80.00 .00 .00
E .00 .00 .00 88.80 .00 .00 .00
F .00 .00 .00 .00 .00 .00 100.00