查看: 9337|回复: 5

[SQL] 想用sql处理不定行的行转列

[复制链接]
论坛徽章:
3
ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-28 15:59:38
跳转到指定楼层
1#
发表于 2017-12-18 10:30 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 kelis2004 于 2017-12-18 10:32 编辑

我想到达到的效果是将表格里面的行转成列显示
以3行为例如下  ,
with t as
(select trunc(sysdate)+rownum -1  rq from dual connect by rownum < 4)
select * from t ;

这个只是3行数据,效果是所有行数据显示在一行如下,问题是如果不知道多少行呢?
2017/12/18
2017/12/19
2017/12/20


我能想到的用pivot  ,类似这种  
pivot xml(max(rq)for rq in (any)) ,但结果是把列转成xml格式,也不是我要的效果,而且还要通过 plsql去解析,不能直接通过sql实现,特请教大牛们。


求职 : 数据库开发
论坛徽章:
24
秀才
日期:2017-08-11 15:38:46秀才
日期:2018-01-02 15:17:54秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22秀才
日期:2018-01-02 15:18:22技术图书徽章
日期:2018-01-02 15:18:30秀才
日期:2018-03-01 10:05:18秀才
日期:2018-05-22 15:21:20
2#
发表于 2017-12-18 11:15 | 只看该作者
PLSQL            EXECUTE IMMEDIATE 'CREATE VIEW AS'XXXXXXXXXXXXXXXXXXXXXXXXXXX

使用道具 举报

回复
论坛徽章:
1
托尼托尼·乔巴
日期:2017-06-08 16:24:51
3#
发表于 2017-12-18 17:03 | 只看该作者
建立一个游标 用动态语句拼接出来

create or replace procedure pr_test(p_ref out sys_refcursor)
is
v_rq1 varchar2(8000);
begin

   execute immediate 'select wm_concat(to_char(rq,'''||'yyyy-mm-dd'||''')) from
            (select trunc(sysdate)+rownum-1    rq   from dual connect by rownum<4)  t ' into v_rq1;

   v_rq1:=replace(v_rq1,',',''',''');
   v_rq1:=''''||v_rq1||'''';
   v_rq1:='select '||v_rq1|| 'from dual';
   open p_ref for v_rq1;
end;

使用道具 举报

回复
论坛徽章:
519
奥运会纪念徽章:垒球
日期: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
4#
发表于 2017-12-19 00:45 | 只看该作者
动态结构只能用动态SQL来返回。
但是这就要求数据的消费者也必须写动态代码来访问这些数据,因为只有在运行的时候才知道数据结构。如果日期有几百个呢?难道你要返回几百个列?这个设计是不合理的。此类转换是数据展现层的任务,不要在数据库中完成。

使用道具 举报

回复
论坛徽章:
3
ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-28 15:59:38
5#
 楼主| 发表于 2017-12-19 09:48 | 只看该作者
却早已分离 发表于 2017-12-18 11:15
PLSQL            EXECUTE IMMEDIATE 'CREATE VIEW AS'XXXXXXXXXXXXXXXXXXXXXXXXXXX

plsql确实可以实现,我是想通过sql

使用道具 举报

回复
论坛徽章:
3
ITPUB15周年纪念
日期:2016-10-13 13:15:34秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-28 15:59:38
6#
 楼主| 发表于 2017-12-19 11:15 | 只看该作者
newkid 发表于 2017-12-19 00:45
动态结构只能用动态SQL来返回。
但是这就要求数据的消费者也必须写动态代码来访问这些数据,因为只有在运 ...

谢谢newkid指点。因为后台的个数不多可以枚举所以才想到这样

使用道具 举报

回复

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

本版积分规则 发表回复

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