以前曾经遇见过,忘记怎么解决的了。这次又遇见了这个问题,没有办法逃避,只好硬着头皮解决。
关键字:SQL Oracle 视图 view 列合并
问题简单描述:[模型]
name item score
小王 数学 1
小王 语文 2
小王 物理 3
小王 化学 4
这是一个表的四条记录
问:如果已知小王只会对应四个科目,如何SQL查询输出成:
小王 数学 1 语文 2 物理 3 化学 4
如果科目不固定,能否实现?
[不能在页面上头处理,只能用SQL语句实现]
最笨的解决办法:[个人认为一定有更好的实现方法]
假设表为a
小王只会对应四个科目
解法如下:[SQL 语句]
select a.name,a.item,a.score,b.item,b.score,c.item,c.score,d.item,d.score
from a a,a b,a c,a d
where a.name='小王' and a.item='数学' and b.name='小王' and b.item='语文'
and c.name='小王' and c.item='物理' and d.name='小王' and d.item='化学'
哈哈,史上最烂的SQL语句 诞生
科目固定的条件下[也就是列数固定]可以解决问题,科目不固定,就不行了。
写到这里想起来了,以前遇到这个问题的时候,是将数据表中的及录取出来,然后呢在页面或者后台构建一个list,list的维度是固定的。然后通过list和resultset的转置,最后实现了以上的列合并结果。
其实静下心来思考一下,现在的关系型数据库其实已经很大程度上符合了现实世界的逻辑,之所以会出现这种需要转置,或者需要列合并的特殊处理,大多数情况是跟我们的数据库设计、模型设计或者现实逻辑等方面出现不足导致的。
因为这篇文章不是讨论我们实际开发中的其他方面,就不展开讨论了。希望本文能够给正在各个搜索引擎上疯狂搜索列合并的网友一点儿帮助。
也希望大家能对这个难题,给出更好的解决办法,多谢!
P.S. 本文所说的这种方法,不是我原创的,也是从多个论坛中看到的。
P.S. 对优快云论坛需要注册登录才能看到某些跟帖的行为,表示鄙视......
elemark
2010年7月13日15:20:35