Oracle SQL:多列转多行并拼接colNum字段格式求助
解决方案
方法1:使用UNPIVOT结合字符串拼接
通过UNPIVOT完成列转行后,从生成的列名中提取序号,再与原colNum拼接:
SELECT CONCAT(colNum, '-', SUBSTRING(col_name, 4, 1), '-U') AS new_colNum, col_value FROM test UNPIVOT ( col_value FOR col_name IN (Col1, Col2, Col3) ) AS unpvt;
说明:
- UNPIVOT将
Col1/Col2/Col3的列名存入col_name字段,对应值存入col_value SUBSTRING(col_name, 4, 1)提取列名末尾的数字(如从Col1中提取1)- 用
CONCAT拼接成要求的原colNum-列序号-U格式
方法2:使用UNION ALL(列数较少时更直观)
直接对每一列单独处理后合并结果:
SELECT CONCAT(colNum, '-1-U') AS new_colNum, Col1 AS col_value FROM test UNION ALL SELECT CONCAT(colNum, '-2-U') AS new_colNum, Col2 AS col_value FROM test UNION ALL SELECT CONCAT(colNum, '-3-U') AS new_colNum, Col3 AS col_value FROM test ORDER BY new_colNum;
说明:
- 每一行查询对应原表的一列,手动指定列序号拼接
new_colNum - 最后用
ORDER BY保证结果按new_colNum排序,与原数据逻辑顺序一致
两种方法执行后都会得到如下结果:
| new_colNum | col_value |
|---|---|
| 1-1-U | 123 |
| 1-2-U | 341 |
| 1-3-U | 635 |
| 2-1-U | 323 |
| 2-2-U | 434 |
| 2-3-U | 343 |
内容的提问来源于stack exchange,提问作者KK_LK
相关产品推荐
相关产品推荐

