我有多个列值需要在结果区域中显示如下。 在 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 |
也许我误解了这个问题,但是 - 对我来说它看起来像是 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>
您可以使用
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
您可以使用
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 |