一张成绩表, 学生编号,课程,成绩 课程有五门:数学,语文,英语,政治,历史。

我想查询后这样展示。学生数学语文英语政治历史张三4045454545请教SQL如何写selects.stuname,c1.totalscore,c2.totalscore... 我想查询后这样展示。
学生 数学 语文 英语 政治 历史
张三 40 45 45 45 45
请教SQL如何写
select
s.stuname,c1.totalscore,c2.totalscore,c3.totalscore,
c4.totalscore,c5.totalscore
from
student s full join
((((
chengji c1 left join chengji c2
on c1.topless=0 and c2.topless=1 and c1.stuid=c2.stuid)
left join chengji c3
on c3.topless=2 and c1.stuid=c3.stuid)
left join chengji c4
on c4.topless=3 and c1.stuid=c4.stuid)
left join chengji c5
on c5.topless=4 and c1.stuid=c5.stuid)
on s.stuid=c1.stuid where s.stuid=102

这是我的sql 语句 但是总是有错误 。
当数学 没有分数时,仍能查询出值。
展开
 我来答
聊娱乐的吃瓜群众
高能答主

2021-08-12 · 真正的娱乐是应着真正的工作要求而发生的。
聊娱乐的吃瓜群众
采纳数:1652 获赞数:86560

向TA提问 私信TA
展开全部

如下:

select s.name,

sum(case topless when 0 then totalscore else 0 end)数学,

sum(case topless when 1 then totalscore else 0 end)语文,

sum(case topless when 2 then totalscore else 0 end)英语,

sum(case topless when 3 then totalscore else 0 end)政治,

sum(case topless when 4 then totalscore else 0 end)历史,

from student s left join chengji c on s.stuid=c.stuid

group by s.name,s.stuid

SQL功能

1、SQL数据定义功能:能够定义数据库的三级模式结构,即外模式、全局模式和内模式结构。在SQL中,外模式又叫做视图(View),全局模式简称模式(Schema),内模式由系统根据数据库模式自动实现,一般无需用户过问。

2、SQL数据操纵功能:包括对基本表和视图的数据插入、删除和修改,特别是具有很强的数据查询功能。

3、SQL的数据控制功能:主要是对用户的访问权限加以控制,以保证系统的安全性。

百度网友5b65437
2012-09-06 · TA获得超过634个赞
知道小有建树答主
回答量:397
采纳率:0%
帮助的人:380万
展开全部
这是个简单的行列转换,你可以去网上通过搜索行列转换找到很多解法,这是我简单写的通过拼接sql来实现

DECLARE @sql NVARCHAR(MAX)

SET @sql = 'SELECT [stuid]'

SELECT @sql = @sql + ',
SUM(CASE WHEN [topless] = ' + CAST([topless] AS NVARCHAR(255)) + ' THEN [score] END) AS topless' + CAST([topless] AS NVARCHAR(255))
FROM ( SELECT DISTINCT [topless] FROM chengji ) t

SET @sql = @sql + '
FROM chengji
GROUP BY [stuid]
'

PRINT @sql
EXEC sys.sp_executesql @sql

最后拼接的sql应该是类似这样
SELECT [stuid],
SUM(CASE WHEN [topless] = 1 THEN [score] END) AS topless1,
SUM(CASE WHEN [topless] = 2 THEN [score] END) AS topless2,
SUM(CASE WHEN [topless] = 3 THEN [score] END) AS topless3
FROM chengji
GROUP BY [stuid]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
szm341
2012-09-06 · TA获得超过6726个赞
知道大有可为答主
回答量:5005
采纳率:100%
帮助的人:5168万
展开全部
select s.name,
sum(case topless when 0 then totalscore else 0 end)数学,
sum(case topless when 1 then totalscore else 0 end)语文,
sum(case topless when 2 then totalscore else 0 end)英语,
sum(case topless when 3 then totalscore else 0 end)政治,
sum(case topless when 4 then totalscore else 0 end)历史
from student s left join chengji c on s.stuid=c.stuid
group by s.name,s.stuid
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友1063546
2012-09-06 · 超过12用户采纳过TA的回答
知道答主
回答量:89
采纳率:0%
帮助的人:45.6万
展开全部
select name as "姓名",max(case when object='语文' then Score else 0 end) as ‘数学’,
max(case when object='数学' then Score else 0 end) as '语文',
max(case when object='数学' then Score else 0 end) as '英语',
max(case when object='数学' then Score else 0 end) as '政治',
max(case when object='数学' then Score else 0 end) as '历史' from Student Group by name

这个sql语句就行了,不过可能列名和你的不一样,这个方式叫做行转列
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友fc3c169
2012-09-06
知道答主
回答量:4
采纳率:0%
帮助的人:3.1万
展开全部
楼主说清楚一些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式