一列行中的多个列值 Oracle SQL

问题描述 投票:0回答:3

我有多个列值需要在结果区域中显示如下。 在 colNum 列中,我需要连接每个结果的值 请指教

表名:test

列数 Col1 Col2 Col3
1 123 341 635
2 323 434 343

结果

列数 col123
1-1-U 123
1-2-U 341
1-3-U 645
2-1-U 323
2-2-U 434
2-3-U 343

当我尝试 unpivot 得到低于结果但无法连接 colNum 中的附加值

结果

列数 col123
1 a
1 b
1 c
sql oracle
3个回答
1
投票

也许我误解了这个问题,但是 - 对我来说它看起来像是 3 个选择的联合。

样本数据:

SQL> with test (colnum, col1, col2, col3) as
  2    (select 1, 'a', 'b', 'c' from dual union all
  3     select 2, 'x', 'y', 'z' from dual
  4    )

查询:

  5  select colnum ||'-1-U' colnum, col1 col123
  6  from test
  7  union all
  8  select colnum ||'-2-U' colnum, col2
  9  from test
 10  union all
 11  select colnum ||'-3-U' colnum, col3
 12  from test
 13  order by 1;

COLNUM     COL123
---------- ----------
1-1-U      a
1-2-U      b
1-3-U      c
2-1-U      x
2-2-U      y
2-3-U      z

6 rows selected.

SQL>

1
投票

您可以使用

UNPIVOT
子句来做到这一点:

SELECT colNum || '-' || col_code || '-U' as colNum, col123
FROM mytable
UNPIVOT(
    col123 
    FOR col_code
    IN (
        col1 AS '1', 
        col2 AS '2', 
        col3 AS '3'
    )
);

结果:

COLNUM  COL123
1-1-U   123
1-2-U   341
1-3-U   635
2-1-U   323
2-2-U   434
2-3-U   343

这里演示


1
投票

您可以使用

UNPIVOT
和串联:

SELECT colNum || '-' || col || '-U' AS colNum,
       col123
FROM   table_name
       UNPIVOT(
         col123 FOR col IN (col1 AS 1, col2 AS 2, col3 AS 3)
       )

其中,对于示例数据:

CREATE TABLE table_name (colNum, Col1, Col2, Col3) AS
SELECT 1, 123, 341, 635 FROM DUAL UNION ALL
SELECT 2, 323, 434, 343 FROM DUAL;

输出:

专栏 COL123
1-1-U 123
1-2-U 341
1-3-U 635
2-1-U 323
2-2-U 434
2-3-U 343

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.