取消透视成行-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来包含重复项:

Demo

结果:

enter image description here

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...