ITPUB论坛-中国最专业的IT技术社区

 
 注册
热搜:
查看: 1317|回复: 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实现,特请教大牛们。


论坛徽章:
20
秀才
日期:2017-08-11 15:38:46秀才
日期:2018-01-02 15:05:41秀才
日期:2018-01-02 15:13:25秀才
日期: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:05:41
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;

使用道具 举报

回复
论坛徽章:
486
秀才
日期:2015-09-09 10:33:01秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21秀才
日期:2016-01-06 14:10:21
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指点。因为后台的个数不多可以枚举所以才想到这样

使用道具 举报

回复

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

本版积分规则

DTCC2018购票6.8折优惠进行时

中国数据库技术大会是国内数据库及大数据领域规模最大、最受欢迎的技术交流盛会。 2018年5月10-12日,第九届中国数据库技术大会将如约而至。本届大会以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余位技术专家,共同探讨Oracle、MySQL、NoSQL、大数据等领域的前瞻性热点话题与技术。
----------------------------------------
优惠时间:2018年2月13日前

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 |
  | | |
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表
北京赛车pk10 申博官网 北京赛车pk10 六台宝典现场开奖 北京赛车pk10历史记录 北京赛车开奖 北京赛车预测 949494开奖结果今晚 威尼斯人线上娱乐 手机投注平台 幸运28投注技巧 pk10助赢软件 北京pk10百度鼎盛彩票网 北京赛车聚彩 北京pk10如何稳杀3码 pk10稳赢方法 pk10定位计划 pk10包赢计划群