求 一个delphi sql查询语句
有一个数据表(dtt)结构如下(课程数是不确定的,可能后面还有其他的):姓名课程成绩王蓝琏英语76王蓝琏语文65王蓝琏数学65李星颜英语86李星颜语文54李星颜数学76叶...
有一个数据表(dtt)结构如下(课程数是不确定的,可能后面还有其他的):
姓名 课程 成绩
王蓝琏 英语 76
王蓝琏 语文 65
王蓝琏 数学 65
李星颜 英语 86
李星颜 语文 54
李星颜 数学 76
叶梦雪 英语 56
叶梦雪 语文 88
叶梦雪 数学 86
朱紫云 数学 64
朱紫云 英语 88
现在查询得出的数据表(rrt)如下:
姓名 语文 数学 英语 总计
王蓝琏 65 65 76 206
李星颜 54 76 86 216
叶梦雪 88 86 56 230
朱紫云 64 88 152
这个 查询语句是怎么写的?还有这server中sql存储语句是怎么写的呢,谢谢各位了哈 展开
姓名 课程 成绩
王蓝琏 英语 76
王蓝琏 语文 65
王蓝琏 数学 65
李星颜 英语 86
李星颜 语文 54
李星颜 数学 76
叶梦雪 英语 56
叶梦雪 语文 88
叶梦雪 数学 86
朱紫云 数学 64
朱紫云 英语 88
现在查询得出的数据表(rrt)如下:
姓名 语文 数学 英语 总计
王蓝琏 65 65 76 206
李星颜 54 76 86 216
叶梦雪 88 86 56 230
朱紫云 64 88 152
这个 查询语句是怎么写的?还有这server中sql存储语句是怎么写的呢,谢谢各位了哈 展开
3个回答
展开全部
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)
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)
展开全部
给你个模板学习!!
学生编号 学生姓名 科别 分数
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 学生编号,学生姓名
学生编号 学生姓名 科别 分数
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 学生编号,学生姓名
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
--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.姓名')
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.姓名')
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询