次のクエリをピボットSQLに変換するロジックを取得できないようです。私のテーブルには20個のカラムがあり、それらのカラムを行に変換したいので、エクセルにエクスポートすると20個のカラムで値が同じになるので、1つのカラムでフィルタリングできます。これまでのところ私がやったことは、単一の一つに20列に変換され、その後の行に単一のものということで分割:SQLクエリをピボットに変換する
select distinct TASKID,
regexp_substr(t.roles,'[^|]+', 1, lines.column_value) as role
from (
select TASKID,
TRIM(ROLE1) || '|' ||
TRIM(ROLE2) || '|' ||
TRIM(ROLE3) || '|' ||
TRIM(ROLE4) || '|' ||
TRIM(ROLE5) || '|' ||
TRIM(ROLE6) || '|' ||
TRIM(ROLE7) || '|' ||
TRIM(ROLE8) || '|' ||
TRIM(ROLE9) || '|' ||
TRIM(ROLE10) || '|' ||
TRIM(ROLE11) || '|' ||
TRIM(ROLE12) || '|' ||
TRIM(ROLE13) || '|' ||
TRIM(ROLE14) || '|' ||
TRIM(ROLE15) || '|' ||
TRIM(ROLE16) || '|' ||
TRIM(ROLE17) || '|' ||
TRIM(ROLE18) || '|' ||
TRIM(ROLE19) || '|' ||
TRIM(ROLE20) as roles
from menu_roles
where RLTYPE='58'
) t,
TABLE(CAST(MULTISET(select LEVEL from dual connect by instr(t.roles, '|', 1, LEVEL - 1) > 0) as sys.odciNumberList)) lines
where regexp_substr(t.roles,'[^|]+', 1, lines.column_value) is not null
order by regexp_substr(t.roles,'[^|]+', 1, lines.column_value)
私はPIVOTを使用して文字列を連結し、分割対、より効率的であることを理解したいです。
ありがとうございました!
? 'select taskid、role1 from menu_roles where rltype = '58 'union select taskid、role2 from menu_roles where rltype = '58' union ... ' –
質問にPL/SQLはありません –
@a_horse_with_no_name:どういう意味ですか? – Jaquio