SQL语句,列合并最笨的实现方法

本文探讨了在Oracle环境中,面对SQL查询中列合并的问题,特别是当科目数量不固定时的解决策略。文章提供了针对科目数量固定的SQL查询语句,并指出了一种历史上的解决方案,即通过数据提取、构建固定维度的list并进行转置操作实现最终结果。同时,作者鼓励读者提供更优的解决方法,强调关系型数据库在逻辑上的强大,以及数据库设计和模型设计的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      以前曾经遇见过,忘记怎么解决的了。这次又遇见了这个问题,没有办法逃避,只好硬着头皮解决。

      关键字: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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值