用于合并2×2行的sql函数(Oracle db)
我有一个表(在Oracle数据库中),如: 我的任务是按myid组合它们,但一次只能组合两行。所以这里的出口应该是:用于合并2×2行的sql函数(Oracle db),sql,oracle,Sql,Oracle,我有一个表(在Oracle数据库中),如: 我的任务是按myid组合它们,但一次只能组合两行。所以这里的出口应该是: 1 'abcdef' 1 'ghi' 2 'jjjjjj' 3 'kkk' 一个id可以有多行。如果一个id有11行,函数应该为该id返回6行(1+2,3+4,5+6,7+8,9+10,11) 函数应该看起来像getCombinedRowsForId(Id number)或者甚至可能是getCombinedRows(),并且它应该返回整个数据表 有什么想法吗?谢谢 SELECT
1 'abcdef'
1 'ghi'
2 'jjjjjj'
3 'kkk'
一个id可以有多行。如果一个id有11行
,函数应该为该id返回6行
(1+2,3+4,5+6,7+8,9+10,11)
函数应该看起来像getCombinedRowsForId(Id number)
或者甚至可能是getCombinedRows()
,并且它应该返回整个数据表
有什么想法吗?谢谢
SELECT myid,
LISTAGG(data,'') WITHIN GROUP (
ORDER BY rank)
FROM
(SELECT myid,
data1||data2||data3 AS data,
row_number() over (order by 1) AS rank,
CASE MOD((row_number() over (partition by myid order by 1)),2)
WHEN 1
THEN row_number() over (partition by myid order by 1)
ELSE row_number() over (partition by myid order by 1) -1
END AS sub_rank
FROM your_table
)
GROUP BY myid, sub_rank;
它首先生成一个视图,如下所示
MYID DATA RANK SUB_RANK
---------- -------------------- ---------- ----------
1 abb 1 1
1 dee 2 1
1 ghh 3 3
2 jjj 4 1
2 jjj 5 1
3 kkk 6 1
然后使用myid、subrank和listag()
将组中的行合并在一起
注意:仅适用于Oracle 11g+您可以合并“最后”两行吗?或者哪两行很重要?编辑得很好..谢谢。我会努力从中学到一些东西。米海-哪两排都不重要。它可以是(第1行+第3行作为returnRow1,第2行+第11行作为returnRow2,…,第9行作为returnRow6)。只是不能复制。准确地说:这需要11g版本2(又名11.2)<代码>列表标记()在11.1中不可用
MYID DATA RANK SUB_RANK
---------- -------------------- ---------- ----------
1 abb 1 1
1 dee 2 1
1 ghh 3 3
2 jjj 4 1
2 jjj 5 1
3 kkk 6 1