• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

使用COALESCE+SUM+CASE

mysql 搞代码 4年前 (2022-01-09) 15次浏览 已收录 0个评论

问题:将表一变成表二 表一: stdname stdsubject result 张三 语文 80 张三 数学 90 张三 物理 85 李四 语文 85 李四 数学 92 李四 物理 82 李四 化学 82 表二: stdname 语文 数学 物理 化学 李四 85 92 82 82 张三 80 90 85 0 问题分析:使用分组解决问题

问题:将表一变成表二

表一:

stdname stdsubject result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82
李四 化学 82

表二:
stdname 语文 数学 物理 化学
李四 85 92 82 82
张三 80 90 85 0

问题分析:使用分组解决问题,则写出来的 sql 会是这种格式的:

SELECT stdname,… FROM #student group by stdname

中间的…如何写呢?

要把表一的记录的值作为表二的字段,则需要使用到 CASE语句,而表一中张三是没有化学成绩的,

所以需要使用 COALESCE。

sql代码:

CREATE TABLE #student (stdname nvarchar(10),stdsubject nvarchar(10),result int) INSERT INTO #student VALUES ('张三','语文',80) INSERT INTO #student values ('张三','数学',90) INSERT INTO #student VALUES ('张三','物理',85) INSERT INTO #student VALUES ('李四','语文',85) INSERT INTO #student values ('李四','数学',92) INSERT INTO #student VALUES ('李四','物理',82) INSERT INTO #student VALUES ('李四','化学',82)
-- 使用 COALESCE + SUM + CASE SELECT stdname, COALESCE(SUM(CASE stdsubject WHEN '化学' THEN Result END),0) 化学, COALESCE(SUM(CASE stdsubject WHEN '数学' THEN Result EN<em style="color:transparent">本文来源[email protected]搞@^&代*@码)网9</em>D),0) 数学, COALESCE(SUM(CASE stdsubject WHEN '物理' THEN Result END),0) 物理, COALESCE(SUM(CASE stdsubject WHEN '语文' THEN Result END),0) 语文  FROM #student  GROUP BY stdname   --使用 拼接 sql 的方法 更简便--使用 SELECT 为变量赋值,会重复从表里取出所有记录,这是SET不能完成的DECLARE @sql VARCHAR(1000) SET @sql = 'SELECT stdname'SELECT @sql = @sql + ',COALESCE(SUM(CASE stdsubject WHEN'''+stdsubject+'''THEN Result END),0)['+stdsubject+']'  FROM (SELECT DISTINCT stdsubject FROM #student) tempSET @sql = @sql + 'FROM #student GROUP BY stdname'EXEC (@sql)

*实际应用中不会这样设计表,这里这是提供一个执行方法。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:使用COALESCE+SUM+CASE

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址