行转列
SELECT REGEXP_SUBSTR(A.ROLECODE, '[^,]+', 1, L) ROLECODE
FROM (SELECT '93271,93273,93327' ROLECODE FROM DUAL) A,
(SELECT LEVEL L FROM DUAL CONNECT BY LEVEL <= 100) B
WHERE L <= LENGTH(A.ROLECODE) - LENGTH(REPLACE(ROLECODE, ',')) + 1;
with a as (select '93271,93273,93327' d from dual)
select regexp_substr(d,'[^,]+',1,rownum) id from a
connect by rownum <= length(regexp_replace(d,'[^,]+'))+1

列转换
select name, coures, to_char(wm_concat(xxx.score)) c
from (select '小明' name, '语文' coures, 90 score
from dual
union all
select '小明' name, '语文' coures, 91 score
from dual
union all
select '小明' name, '数学' coures, 90 score
from dual
union all
select '小明' name, '数学' coures, 91 score from dual) xxx
group by xxx.name, coures

1-100
SELECT LEVEL l FROM DUAL CONNECT BY LEVEL <= 100

本文介绍SQL中将行数据转换为列数据的技巧,包括使用REGEXP_SUBSTR函数进行字符串拆分,以及如何通过GROUP BY和WM_CONCAT函数实现列数据的聚合。这些技巧对于处理复杂数据结构和提升数据查询效率非常实用。
1万+

被折叠的 条评论
为什么被折叠?



