UNPIVOT 在多列上返回多列

UNPIVOT on multiple columns to return multiple columns(UNPIVOT 在多列上返回多列)
本文介绍了UNPIVOT 在多列上返回多列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

以下是PL/SQL中要实现的要求-

Below is the requirement to be acheived in PL/SQL-

表格格式为

CREATE TABLE NETWORK_TABLE ( ORIG_CODE NUMBER, ORIG_SV NUMBER, DEST_CODE NUMBER, DEST_SV NUMBER )

样本数据 -

INSERT INTO network_table VALUES ( 14, 1, 15, 1);

INSERT INTO network_table VALUES ( 18, 4, 11, 1);

INSERT INTO network_table VALUES ( 15, 1, 22, 3);

INSERT INTO network_table VALUES ( 23, 2, 21, 1);

INSERT INTO network_table VALUES ( 14, 3, 11, 1);

INSERT INTO network_table VALUES ( 12, 2, 22, 2);

表格数据看起来像 -

Table data looks like -

Orig_r  orig_sv  dest_r dest_sv
  14     1       15     1 
  12     2       22     2 
  18     4       11     1 
  15     1       22     3 
  14     3       11     1 

现在,我想得到如下输出 -

Now, I want to get the output as below -

ROOT SV
14   1 
15   1  
12   2
22   2
18   4
11   1
15   1
22   3
14   3
1    1

我怎样才能做到这一点?感谢您的意见

How can I acheive this? Appreciate your input

推荐答案

像这样:

SQL> select * from network_table;

 ORIG_CODE    ORIG_SV  DEST_CODE    DEST_SV
---------- ---------- ---------- ----------
        14          1         15          1
        12          2         22          2
        18          4         11          1
        15          1         22          3
        14          3         11          1

SQL> select case name when 'ORIG_SV' then orig_code else dest_code end code, val 
  2  from network_table 
  3  unpivot (val for name in (orig_sv, dest_sv));

      CODE        VAL
---------- ----------
        14          1
        15          1
        12          2
        22          2
        18          4
        11          1
        15          1
        22          3
        14          3
        11          1

或 10g 及以下:

SQL> select case  r when 1 then orig_code else dest_code end code,
  2         case r when 1 then orig_sv else dest_sv end val
  3    from network_table, (select rownum r from dual connect by level <= 2)
  4  /

      CODE        VAL
---------- ----------
        14          1
        12          2
        18          4
        15          1
        14          3
        15          1
        22          2
        11          1
        22          3
        11          1

这篇关于UNPIVOT 在多列上返回多列的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Execute complex raw SQL query in EF6(在EF6中执行复杂的原始SQL查询)
Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)