问题描述
我有下表-有很多行-
ID A_1 B_1 A_2 B_2 A_3 B_3
-- ---- --- --- ---- --- ---
1 0 0 0 0 0 0
2 1 0 0 0 0 0
我需要获取以下输出表-
这些行将是ID,A_1,B_1等。
ID A B
--- -- --
1 0 0
1 0 0
1 0 0
2 1 0
2 0 0
2 0 0
我尝试了unionpun Union-每个ID仅获得一行,而不是三行。
我该怎么做?
解决方法
您必须使用Union All来包含重复项:
结果:
SELECT ID,A_1 A,B_1 B FROM TABLE1
UNION ALL
SELECT ID,A_2,B_2 FROM TABLE1
UNION ALL
SELECT ID,A_3,B_3 FROM TABLE1 ORDER BY ID;
,
select *
from t
unpivot (
(A,B)
for z in (
(A_1,B_1),(A_2,B_2),(A_3,B_3)
)
);
具有结果的完整测试用例:
with t (ID,A_1,B_1,B_2,B_3) as (
select 1,0 from dual union all
select 2,1,0 from dual
)
select *
from t
unpivot (
(A,B_3)
)
);
结果:
ID Z A B
---------- ------- ---------- ----------
1 A_1_B_1 0 0
1 A_2_B_2 0 0
1 A_3_B_3 0 0
2 A_1_B_1 1 0
2 A_2_B_2 0 0
2 A_3_B_3 0 0