首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL转换表

SQL转换表
EN

Stack Overflow用户
提问于 2020-10-29 00:52:57
回答 2查看 73关注 0票数 0

我在表格中有如下图所示的数据:

我想要这样的东西:

我尝试插入第一个id、nr_1和lbl_1,然后使用:

代码语言:javascript
复制
MERGE INTO ...

WHEN MATCHED THEN UPDATE SET...

WHEN NOT MATCHED THEN INSERT..

但似乎不起作用。

没有人有更好的解决方案来实现这个目标而不使用MERGE吗?

EN

回答 2

Stack Overflow用户

发布于 2020-10-29 01:43:14

您可以使用将值放入单个列的listagg来实现类似的操作:

代码语言:javascript
复制
select distinct
  id,
  listagg(nr || '    ' || lbl, '     ')
    within group (order by nr)
    over (partition by id) as "nr_1 lbl_1 nr_2 lbl_2 nr_3 lbl_3"
from a
order by id
代码语言:javascript
复制
        ID nr_1 lbl_1 nr_2 lbl_2 nr_3 lbl_3
---------- --------------------------------
      1001 x    a     y    b     z    c
      1002 x    a     z    c
      1003 z    c
票数 0
EN

Stack Overflow用户

发布于 2020-10-29 04:48:58

有很多方法可以使用Oracle的case,decode,liastagg,pivot,sys_connect_by_path,xmlagg funtions.Here来实现输出。

代码语言:javascript
复制
SELECT  id,
MAX(DECODE ( rnk , 1, nr )) nr1,MAX(DECODE ( rnk , 1, lbl )) lbl1,
MAX(DECODE ( rnk , 2, nr )) nr2,MAX(DECODE ( rnk , 2, lbl )) lbl2,
MAX(DECODE ( rnk , 3, nr )) nr3,MAX(DECODE ( rnk , 3, lbl )) lbl3
FROM
(select pop.*,dense_rank() over (order by nr,lbl) as rnk from (
SELECT  id , nr, lbl,
row_number() OVER ( partition by id  order by nr) rn
FROM  tabd) pop order by id,rn)
GROUP BY id;

Click for Query Output

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64577651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档