查看: 10213|回复: 10

【讨论】Oracle怎么将一个表的字段值关联另一个表的字段名

[复制链接]
论坛徽章:
1
优秀写手
日期:2014-11-06 06:00:12
发表于 2014-10-30 09:40 | 显示全部楼层 |阅读模式
有这么两个表,一个是A表,只有两列,如下:
设备id      参数
1             长
1            宽
1            高
2            体积
3            重量
3            长
。。。

B表如下:
设备id   长    宽     高      体积       重量 。。。。
1           2     3     4         空          空
2          空     空    空       6           空
3          3     空     空       空          4
。。。

怎样能把A表字段内容关联B表的字段名,得到查询结果这样:
设备id     参数      值
1            长          2
1            宽          3
1            高          4
2            体积       6
3            重量       4
3            长         3

这是个例子,之前在别的地方看到说可以把B表先行列转换,但B表很多字段,有5、60个,记录数有70多万,有没有简单点的办法呢?谢谢
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2014-10-30 09:48 | 显示全部楼层
只能动态sql了

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-11-06 06:00:12
 楼主| 发表于 2014-10-30 10:36 | 显示全部楼层
lastwinner 发表于 2014-10-30 09:48
只能动态sql了

不是很懂,能详细地说说吗?谢谢

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-11-06 06:00:12
 楼主| 发表于 2014-10-30 11:42 | 显示全部楼层
顶顶顶

使用道具 举报

回复
求职 : 数据库管理员
认证徽章
论坛徽章:
11
ITPUB社区千里马徽章
日期:2013-06-09 10:15:34懒羊羊
日期:2015-03-04 14:52:11懒羊羊
日期:2015-02-10 13:36:05马上有对象
日期:2015-02-02 12:29:02红宝石
日期:2015-01-19 09:44:10马上有车
日期:2014-11-11 14:16:07马上有车
日期:2014-03-27 15:59:39优秀写手
日期:2014-03-12 06:00:13马上有钱
日期:2014-02-18 16:43:092014年新春福章
日期:2014-02-18 16:43:09
发表于 2014-10-30 12:45 | 显示全部楼层
还要加行列转换,嘿嘿。

使用道具 举报

回复
论坛徽章:
536
奥运会纪念徽章:垒球
日期:2008-09-15 01:28:12生肖徽章2007版:鸡
日期:2008-11-17 23:40:58生肖徽章2007版:马
日期:2008-11-18 05:09:48数据库板块每日发贴之星
日期:2008-11-29 01:01:02数据库板块每日发贴之星
日期:2008-12-05 01:01:03生肖徽章2007版:虎
日期:2008-12-10 07:47:462009新春纪念徽章
日期:2009-01-04 14:52:28数据库板块每日发贴之星
日期:2009-02-08 01:01:03生肖徽章2007版:蛇
日期:2009-03-09 22:18:532009日食纪念
日期:2009-07-22 09:30:00
发表于 2014-10-30 23:36 | 显示全部楼层
既然是静态的结构就用不着动态SQL。你只是嫌烦而已,那么可以借助数据字典帮你生成这个列转行的SQL。先把简单几个列的写出来,剩下的就知道该怎么生成了。

使用道具 举报

回复
论坛徽章:
0
发表于 2014-11-5 15:29 | 显示全部楼层
with A(id,paremeter)as(
values
(1,'长'),
(1,'宽'),
(1,'高')
),
B(id,length,width,height)as(
values(1,2,3,4)
)
select a.id,a.paremeter,
max(case when paremeter='长' then length
         when paremeter='高' then height
                 when paremeter='宽' then width
        end ) as id_value
from A a left join B b on a.id = b.id
group by  a.id,a.paremeter

使用道具 举报

回复
招聘 : 系统分析师
论坛徽章:
483
马上有钱
日期:2014-02-19 11:55:14itpub13周年纪念徽章
日期:2014-09-29 01:14:14itpub13周年纪念徽章
日期:2014-10-08 15:15:25itpub13周年纪念徽章
日期:2014-10-08 15:15:25马上有对象
日期:2014-10-12 11:58:40马上有车
日期:2014-11-16 17:11:29慢羊羊
日期:2015-02-09 17:04:38沸羊羊
日期:2015-03-04 14:43:432015年新春福章
日期:2015-03-06 11:57:31ITPUB年度最佳版主
日期:2015-03-18 15:48:48
发表于 2014-11-5 16:44 | 显示全部楼层
芳林野草 发表于 2014-11-5 15:56
不要用动态SQL,没有必要。这里的A表是多余的,忽略即可。

使用union all然后加where条件过滤。

这样的话,手工写起来比较累

使用道具 举报

回复
论坛徽章:
6
2014年新春福章
日期:2014-02-18 16:44:08马上有对象
日期:2014-02-18 16:44:08优秀写手
日期:2014-02-27 06:00:02问答徽章
日期:2014-04-13 19:36:532015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
发表于 2014-11-5 17:13 | 显示全部楼层
lastwinner 发表于 2014-11-5 16:44
这样的话,手工写起来比较累

是的,大神说的有道理。

不过我觉得,这个问题归根结底是行列转换问题。
既然有A表,还不如A表多设计一个字段,直接把值填A表。
何苦又有A表又有B表?

使用道具 举报

回复
论坛徽章:
0
发表于 2014-11-5 21:29 | 显示全部楼层
这个行不行
例子.PNG

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会,7折限时优惠重磅来袭!
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。

限时七折期:2019年8月31日前


----------------------------------------

大会官网>>
TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 
京ICP备09055130号-4  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表