壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6834|回复: 6

[其他] SQL动态行列转置问题

[复制链接]
发表于 2008/5/16 09:16:05 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
请教一下
需要把 表1:
namelessonscore
张三语文90
李四数学94
王五英语87
张三数学77
李四语文80
王五数学68


行列转置为 表2行变成列,列变成行)
name张三李四王五张三李四王五
lesson语文数学英语数学语文数学
score909487778068

如果行列都是动态的应如何处理?
谢谢
发表于 2008/5/23 15:17:04 | 显示全部楼层
有人用游标解决这个问题。你看看下面这个例子应该会对你有点启发

固定列数的行列转换   
   
  如   
  student   subject   grade   
  ---------------------------   
  student1   语文   80   
  student1   数学   70   
  student1   英语   60   
  student2   语文   90   
  student2   数学   80   
  student2   英语   100   
  ……   
  转换为     
  语文   数学   英语   
  student1   80   70   60   
  student2   90   80   100   
  ……   
  语句如下:   
  select   student,sum(decode(subject,'语文',   grade,null))   "语文",   
  sum(decode(subject,'数学',   grade,null))   "数学",   
  sum(decode(subject,'英语',   grade,null))   "英语"   
  from   table   
  group   by   student   
  2、不定列行列转换   
  如   
  c1   c2   
  --------------   
  1   我   
  1   是   
  1   谁   
  2   知   
  2   道   
  3   不   
  ……   
  转换为   
  1   我是谁   
  2   知道   
  3   不   
  这一类型的转换必须借助于PL/SQL来完成,这里给一个例子   
  CREATE   OR   REPLACE   FUNCTION   get_c2(tmp_c1   NUMBER)     
  RETURN   VARCHAR2     
  IS     
  Col_c2   VARCHAR2(4000);     
  BEGIN   
  FOR   cur   IN   (SELECT   c2   FROM   t   WHERE   c1=tmp_c1)   LOOP     
  Col_c2   :=   Col_c2||cur.c2;     
  END   LOOP;     
  Col_c2   :=   rtrim(Col_c2,1);   
  RETURN   Col_c2;     
  END;   
  /   
  SQL>   select   distinct   c1   ,get_c2(c1)   cc2   from   table;即可
 楼主| 发表于 2008/5/23 18:45:30 | 显示全部楼层
2楼是做的交叉表,不是行列转置。
行列转置是要把表X轴和Y轴颠倒。
我重新改一下题目条件
表一
Tdef
a100
b220
c333

标题行和第一列都没有重复的项
变为 表二
Tabc
d123
e023
f003

表一的第一列变成表二的标题行了
表一的标题行变成表二头一列

行列要求是动态的,是不是太难了?
拜托高手指点了

[ 本帖最后由 b374aaa 于 2008-5-23 18:51 编辑 ]
发表于 2008/12/13 22:41:36 | 显示全部楼层
算法很简单的,先提取表头,再提取数据就行了
发表于 2009/3/24 09:42:24 | 显示全部楼层
顶一下
发表于 2009/9/24 21:28:29 | 显示全部楼层
一句sql想了下,估计是很难弄出来的。因为你这里不一定每项都是数字,另外你把column的名称也行列转换了。相对来说就比较复杂了。不过用游标还是很容易写出来的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/29 00:49 , Processed in 0.014309 second(s), 14 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表