求 一个delphi sql查询语句

2025-03-11 09:10:48
推荐回答(3个)
回答1:

sqlserver2005下测试成功!

declare @sql varchar(8000)
set @sql=''

select @sql=@sql+','+rtrim(课程)+'=(SELECT isnull(SUM(case b.课程 when '''+课程+''' then ISNULL(b.成绩,0) end ),0) FROM ddt b where b.姓名=t.姓名)'
from ddt
group by 课程
order by 课程

set @sql='select t.姓名 AS 姓名 '+@sql+' , SUM(t.成绩) AS 总计 from ddt t group by t.姓名 '
exec(@sql)

回答2:

给你个模板学习!!
学生编号 学生姓名 科别 分数
1083 张三 语文 75
1083 张三 数学 84
1083 张三 英语 92
1084 李四 语文 84
1084 李四 数学 93
1084 李四 英语 87

怎么得出如下的表
学生编号 学生姓名 语文 数学 英语
1083 张三 75 84 92
1084 李四 84 93 87

答案:
Select 学生编号,学生姓名,sum(case when 科别=’语文’ then 分数 else 0 end) as 语文,sum(case when 科别=’数学’ then 分数 else 0 end) as 数学,sum(case when 科别=’英语’ then 分数 else 0 end) as 英语 from A group by 学生编号,学生姓名

回答3:

--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 dtt) as a
set @sql = @sql + ' , cast(avg(成绩*1.0) as decimal(18,2)) 平均分 , sum(成绩) 总分 from dtt group by 姓名'
exec(@sql)

--SQL SERVER 2005 动态SQL。
declare @sql varchar(8000)
select @sql = isnull(@sql + ',' , '') + 课程 from dtt group by 课程
exec ('select m.* , n.平均分 , n.总分 from
(select * from (select * from dtt) a pivot (max(成绩) for 课程 in (' + @sql + ')) b) m ,
(select 姓名 , cast(avg(成绩*1.0) as decimal(18,2)) 平均分 , sum(成绩) 总分 from dtt group by 姓名) n
where m.姓名 = n.姓名')