2013年03月05日   码农之路   5,401 次浏览

举个很常见的例子,现有如下表格:
姓名 课程 分数
张三 语文 74
张三 数学 83
张三 物理 93
李四 语文 74
李四 数学 84
李四 物理 94

想变成如下结果:
姓名 语文 数学 物理
李四 74 84 94
张三 74 83 93

下面这种方法是针对课程字段值不是很多的情况,否则SQL会变得很长

SELECT 姓名,
  MAX(CASE 课程 WHEN '语文' THEN 分数 ELSE 0 END) 语文,
  MAX(CASE 课程 WHEN '数学' THEN 分数 ELSE 0 END) 数学,
  MAX(CASE 课程 WHEN '物理' THEN 分数 ELSE 0 END) 物理
FROM TEST
GROUP BY 姓名

可以将SQL中的CASE语句用DECODE代替。

那个如果课程字段值非常多时,这个SQL就会变得很长了,这时我们就需写个函数来处理了,具体思路是:循环所有的字段拼出SQL并持行。时间问题,具体函数就不写出来了。

赞 赏
申明:除非注明,本站文章均为原创,转载请以链接形式标明本文地址。 如有问题,请于一周内与本站联系,本站将在第一时间对相关内容进行处理。
本文地址: http://www.yyjjssnn.cn/articles/682.html
相关阅读: ORACLE

>>> Hello World <<<

这篇内容是否帮助到你了呢?

如果你有任何疑问或有建议留给其他朋友,都可以给我留言。

:wink: :twisted: :surprised: :smile: :smile9: :smile8: :smile7: :smile6: :smile5: :smile56: :smile55: :smile54: :smile53: :smile52: :smile51: :smile50: :smile4: :smile49: :smile48: :smile47: :smile46: :smile45: :smile44: :smile43: :smile42: :smile41: :smile40: :smile3: :smile39: :smile38: :smile37: :smile36: :smile35: :smile34: :smile33: :smile32: :smile31: :smile30: :smile2: :smile29: :smile28: :smile27: :smile26: :smile25: :smile24: :smile23: :smile22: :smile21: :smile20: :smile1: :smile19: :smile18: :smile17: :smile16: :smile15: :smile14: :smile13: :smile12: :smile11: :smile10: :smile0: :sad: :rolleyes1: :redface: :razz: :question: :neutral: :mrgreen: :mad: :lol: :idea: :exclaim: :evil: :eek: :cry: :cool: :confused: :biggrin: :arrow:

友情链接: 程序员刘杨 刘杨
Copyright 2003~2018 保留所有权利 | 网站地图
备案号:湘ICP备14001005号-2

湘公网安备 43011102001322号