如何解决取消透视成行-PL / SQL
我有下表-有很多行-
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。