问题描述
我有一个以列名为值的表。表格中有10行。此输出的所需输出将显示为两列,前5行为一列A,第6至10行为一列B,彼此相邻为5行数据,如下所示
数据脚本
谢谢
拉维
A B ------------------------ ABN001001 ABN001006 ABN001002 ABN001007 ABN001003 ABN001008 ABN001004 ABN001009 ABN001005 ABN001010
数据脚本
create table Test1 (id number, value varchar(40)); begin insert into Test1 (id,value) values (1000,'ABN001001'); insert into Test1 (id,value) values (1002,'ABN001002'); insert into Test1 (id,value) values (1003,'ABN001003'); insert into Test1 (id,value) values (1004,'ABN001004'); insert into Test1 (id,value) values (1005,'ABN001005'); insert into Test1 (id,value) values (1006,'ABN001006'); insert into Test1 (id,value) values (1007,'ABN001007'); insert into Test1 (id,value) values (1008,'ABN001008'); insert into Test1 (id,value) values (1009,'ABN001009'); insert into Test1 (id,value) values (1010,'ABN001010'); end;
谢谢
拉维
专家解答
这是一种方法:
-为每一行分配一个行号
-通过将该数字除以5,将行分成1-5、6-10组。占据它的天花板
-同时获取此行号mod 5的值
然后,您可以按第一个计算中的值进行透视。这将它们分成两列。你需要两个mod将组分成五行。这是因为数据库为不在pivot子句中的每一列添加一个隐式组by
这给出了:
-为每一行分配一个行号
-通过将该数字除以5,将行分成1-5、6-10组。占据它的天花板
-同时获取此行号mod 5的值
然后,您可以按第一个计算中的值进行透视。这将它们分成两列。你需要两个mod将组分成五行。这是因为数据库为不在pivot子句中的每一列添加一个隐式组by
这给出了:
with rws as (
select ceil ( row_number () over ( order by id ) / 5 ) grp,
mod ( row_number () over ( order by id ), 5 ) rw,
value
from test1 t
)
select *
from rws
pivot (
max ( value ) for grp in ( 1 a, 2 b)
)
order by a;
RW A B
1 ABN001001 ABN001006
2 ABN001002 ABN001007
3 ABN001003 ABN001008
4 ABN001004 ABN001009
0 ABN001005 ABN001010 「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




