sql多行数据合并为一行数据

ncc595720438 2019-05-20 04:42:20
查询 select * from tcourse where 姓名=A
姓名 课程 老师 得分
A 数学 数1 80
A 语文 语1 75
A 外语 外1 90

期望输出:
数学成绩 语文成绩 外语成绩
姓名 课程 老师 得分 课程 老师 得分 课程 老师 得分
A 数学 数1 80 语文 语1 75 外语 外1 90

将上面一个人的三条成绩(三行四列),转为一行数据(一行10列),可以用sql,或者存储过程,求大神解答。
...全文
492 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaiyibao 2019-05-23
  • 打赏
  • 举报
回复
sql="select * from tcourse where 姓名='A'"
cur.execute(sql)
result=cur.fetchall()listaa=[]
for i,a,b in zip(result[0],result[1],result[2]):
listaa.append(i)
listaa.append(a)
listaa.append(b)
listaa.remove('A')
listaa.remove('A')
print(listaa)

得到的元素为10的一个list 再插入进mysql就行
ncc595720438 2019-05-21
  • 打赏
  • 举报
回复
嗯 group by + 聚合函数可以实现
RINK_1 2019-05-20
  • 打赏
  • 举报
回复
如果课程始终是这3门,那就用以下试试,否则就得用动态的方法了。

 SELECT 姓名,
        MAX(CASE WHEN 课程='数学' THEN 课程 ELSE '' END) AS 课程_数学,
		MAX(CASE WHEN 课程='数学' THEN 老师 ELSE '' END) AS 老师_数学,
		MAX(CASE WHEN 课程='数学' THEN 得分 ELSE '' END) AS 得分_数学,
		MAX(CASE WHEN 课程='语文' THEN 课程 ELSE '' END) AS 课程_语文,
		MAX(CASE WHEN 课程='语文' THEN 老师 ELSE '' END) AS 老师_语文,
		MAX(CASE WHEN 课程='语文' THEN 得分 ELSE '' END) AS 得分_语文,
		MAX(CASE WHEN 课程='外语' THEN 课程 ELSE '' END) AS 课程_外语,
		MAX(CASE WHEN 课程='外语' THEN 老师 ELSE '' END) AS 老师_外语,
		MAX(CASE WHEN 课程='外语' THEN 得分 ELSE '' END) AS 得分_外语
FROM tcourse
GROUP BY 姓名

34,837

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧