查看: 4943|回复: 8

[PL/SQL] [讨论]关于动态列查询问题求助

[复制链接]
论坛徽章:
1
优秀写手
日期:2014-10-23 06:00:14
发表于 2014-10-21 20:28 | 显示全部楼层 |阅读模式
今天在开发一个VIEW的时候遇到一个动态列查询的问题,要求大概是这样的:
建立一个视图查询 A,B,C 表的一个动态判断,A,B,C均含有 period(DATE,'YYYYMM'),P1,P2,P3,P4,P5,P6,P7,P8,P9,P10,P11,P12,P13(都是VARCHAR2)
period对应的P值可以从另外一个表TIME2PERIOD(PERIOD,P)找到P值对应(P1-P13),要求建立的视图是判断当前P值是否有数据返回的集合,有的标记为1,没有返回标记为0
实现的效果如下
表明 状态  结果
A      1      read
B      1      read
C      0      not read

直接拼凑的方式无法在SQL中实现,于是我通过一个function(fun)取到P值之后用,想调用FUN的返回值作为字段名 (select FUN from A) 来查询数据。假设fun返回P10,select FUN from A 发现fun在PLSQL中只能作为一个值来展现起作用等同于 SELECT 'P10' FROM A ,而我要实现的是 select P10 from A 。    求教大神们有没有什么方法能够实现动态字段加载到SQL里的,晚上上边的实现效果。用行转列的方式我已经实现了,小弟不才,这是没办法中的办法,想看看有没有更好的方式。
论坛徽章:
1
优秀写手
日期:2014-10-23 06:00:14
 楼主| 发表于 2014-10-21 20:29 | 显示全部楼层
偶尔也有上来逛逛论坛涨涨姿势,可惜学艺不精,找不到方法。求大牛指导!

使用道具 举报

回复
论坛徽章:
401
紫蛋头
日期:2012-05-21 10:19:41迷宫蛋
日期:2012-06-06 16:02:49奥运会纪念徽章:足球
日期:2012-06-29 15:30:06奥运会纪念徽章:排球
日期:2012-07-10 21:24:24鲜花蛋
日期:2012-07-16 15:24:59奥运会纪念徽章:拳击
日期:2012-08-07 10:54:50奥运会纪念徽章:羽毛球
日期:2012-08-21 15:55:33奥运会纪念徽章:蹦床
日期:2012-08-21 21:09:51奥运会纪念徽章:篮球
日期:2012-08-24 10:29:11奥运会纪念徽章:体操
日期:2012-09-07 16:40:00
发表于 2014-10-21 21:28 | 显示全部楼层
left join

使用道具 举报

回复
论坛徽章:
533
奥运会纪念徽章:垒球
日期: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-21 21:52 | 显示全部楼层
参见置顶帖提问的智慧。

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-23 06:00:14
 楼主| 发表于 2014-10-21 21:58 | 显示全部楼层
〇〇 发表于 2014-10-21 21:28
left join

我这情况是从 time2period取到的值作为 A,B,C的字段来查询。left join做不到...

使用道具 举报

回复
论坛徽章:
1
优秀写手
日期:2014-10-23 06:00:14
 楼主| 发表于 2014-10-21 22:18 | 显示全部楼层
或许综合成一个简单的问题来问.....
如何将另外一个表或者过程得到的值作为一个表的字段写到SQL语句查询

使用道具 举报

回复
论坛徽章:
4
2012新春纪念徽章
日期:2012-01-04 11:58:18鲜花蛋
日期:2012-03-12 15:51:272015年新春福章
日期:2015-03-04 14:53:162015年新春福章
日期:2015-03-06 11:58:39
发表于 2014-10-22 21:26 | 显示全部楼层
gdczrplxy 发表于 2014-10-21 22:18
或许综合成一个简单的问题来问.....
如何将另外一个表或者过程得到的值作为一个表的字段写到SQL语句查询

做不到吧,一列就是一列,不可能变成多列,哪怕这列是个集合,返回的也是一列

使用道具 举报

回复
论坛徽章:
533
奥运会纪念徽章:垒球
日期: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-22 21:59 | 显示全部楼层
gdczrplxy 发表于 2014-10-21 22:18
或许综合成一个简单的问题来问.....
如何将另外一个表或者过程得到的值作为一个表的字段写到SQL语句查询

让你按照提问的智慧来发帖,你反而更抽象了?

使用道具 举报

回复
论坛徽章:
0
发表于 2014-10-29 16:03 | 显示全部楼层
我也不是很清楚,前面遇到一个问题。有点相似,参考一下。
我先从一个表中查询获取另一个表的字段名。
然后通过动态SQL的方式执行。
TYPE cur_type IS REF CURSOR;--先定义动态游标
c_po          cur_type;--定义游标
open c_po for v_sql;--其中v_sql是sql语句,是一个字符串,如:'select * from emp',事先查询出来
                        --的字段可以拼起来
loop
    FETCH c_po
      INTO v_cur_po;--其中v_cur_po是行类型
    EXIT WHEN c_po%NOTFOUND;
end loop;

使用道具 举报

回复

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

本版积分规则 发表回复

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