求助:如何将SQL查询结果分两行显示

姜维伯约 2013-03-07 10:34:46
假设一行里的某字段有10个字,变成每行显示5个字,共两行。
就像:
ROWID NAME
1 0123456789

变成:
ROWID NAME
1 01234
2 56789

请问这用什么的SQL语句可以实现得了哦?

数据库是 Oracle 10G
...全文
593 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Cryking 2013-03-07
  • 打赏
  • 举报
回复
用UNION ALL吧
with t as
 (select 1 AS rd, '0123456789' name
    from dual
  UNION ALL
  SELECT 2 AS RD, 'ABCDWQWERA' name from dual)
select row_number() over(order by a) rd, a
  from (select DECODE(LENGTH(NAME) / 5,
                      0,
                      SUBSTR(NAME, -LENGTH(NAME), LENGTH(NAME)),
                      substr(name, 0, 5)) A
          FROM T
        connect by LEVEL < (SELECT SUM(LENGTH(NAME) / 5 - 1) FROM T)
        union all
        select REPLACE(NAME,
                       DECODE(LENGTH(NAME) / 5,
                              0,
                              SUBSTR(NAME, -LENGTH(NAME), LENGTH(NAME)),
                              substr(name, 0, 5)),
                       '') a
          from t
        connect by LEVEL < (SELECT SUM(LENGTH(NAME) / 5 - 1) FROM T))
结果:
   	RD	A
1	1	01234
2	2	56789
3	3	ABCDW
4	4	QWERA
我这里限制了NAME字段只能小于等于10个字符串长度,且固定用5个长度去截取.,
姜维伯约 2013-03-07
  • 打赏
  • 举报
回复
引用 1 楼 tonypingge 的回复:
ROWID NAME 1 0123456789 --此行数据拆分成两行后,rowid的取值有什么要求?5? 2 0123456789 3 0123456789 4 0123456789
rowid顺延增加。
tonypingge 2013-03-07
  • 打赏
  • 举报
回复
substr() + union all 不知道有没有更好的方法,看楼下都怎么说.
tonypingge 2013-03-07
  • 打赏
  • 举报
回复
ROWID NAME 1 0123456789 --此行数据拆分成两行后,rowid的取值有什么要求?5? 2 0123456789 3 0123456789 4 0123456789

17,140

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧