Oracle 中的 Unpivot Multiple 列不起作用

Unpivot Multiple columns in Oracle is not working

我有一个 table 如下所示

Process_1 Tab1_Count Tab1_Process_Count Tab1_Status Process_2 Tab2_Count Tab2_Process_Count Tab2_Status
Tab1_Process 123 123 等于 Tab2_Process 123 126 不等于

我正在尝试像下面这样取消上面的透视

表进程 Tab_Count Process_Count 状态
Tab1_Process 123 123 等于
Tab2_Process 123 123 不等于

使用以下查询

SELECT * 
FROM
(       
SELECT 'Tab1' AS tab1_Process,
count(tb1.ID) AS tab1_count,
count(tbp1.ID) AS tab1_Process_count,
CASE WHEN count(tb1.ID)=count(tbp1.ID) THEN 'Equal' ELSE 'Not Equal' END AS Tab1_Status,
 'Tab2' AS tab2_Process,
count(tb2.ID) AS tab2_count,
count(tbp2.ID) AS tab2_Process_count,
CASE WHEN count(tb2.ID)=count(tbp2.ID) THEN 'Equal' ELSE 'Not Equal' END AS Tab2_Status
FROM table1 tb1
LEFT JOIN table1_process tbp1 ON tbp1.ID = tb1.ID
LEFT JOIN table2 tb2 ON tb2.ID = tb1.ID 
LEFT JOIN table1_process tbp2 ON tbp2.ID = tb2.ID
)
UNPIVOT
(
(TABLEPROCESS,STATUS)
FOR COUNT IN
(
(Tab1_Count,Tab2_Count) AS 'Tab_Count',
(Tab1_Process_Count,Tab2_Process_Count) AS 'Process_Count',
(Tab1_Status,Tab2_Status) AS 'STATUS'
)
)

但它给我错误 -- ORA-00907: 缺少右括号

根据 Alex Poole 的评论,尝试了 CROSS APPLY 方法

SELECT * 
    FROM
    (       
    SELECT 'Tab1' AS tab1_Process,
    count(tb1.ID) AS tab1_count,
    count(tbp1.ID) AS tab1_Process_count,
    CASE WHEN count(tb1.ID)=count(tbp1.ID) THEN 'Equal' ELSE 'Not Equal' END AS Tab1_Status,
     'Tab2' AS tab2_Process,
    count(tb2.ID) AS tab2_count,
    count(tbp2.ID) AS tab2_Process_count,
    CASE WHEN count(tb2.ID)=count(tbp2.ID) THEN 'Equal' ELSE 'Not Equal' END AS Tab2_Status
    FROM table1 tb1
    LEFT JOIN table1_process tbp1 ON tbp1.ID = tb1.ID
    LEFT JOIN table2 tb2 ON tb2.ID = tb1.ID 
    LEFT JOIN table1_process tbp2 ON tbp2.ID = tb2.ID
    )
    CROSS APPLY
    VALUES (
    
    (tab1_Process,Tab1_Count,Tab1_Process_Count,Tab1_Status),
    (tab2_Process,Tab2_Count,Tab2_Process_Count,Tab2_Status),
    
    ) (Process,Tab_Count,Process_Count,Status);

它在 SQL Server 中工作,但它给出 ORA-00903: invalid table name in oracle

我是 oracle 新手,请帮助

使用以下 UNPIVOT 查询

实现了预期结果
SELECT TABLEPROCESS,TAB_COUNT,PROCESS_COUNT,STATUS 
FROM
(       
SELECT 'Tab1' AS tab1_Process,
count(tb1.ID) AS tab1_count,
count(tbp1.ID) AS tab1_Process_count,
CASE WHEN count(tb1.ID)=count(tbp1.ID) THEN 'Equal' ELSE 'Not Equal' END AS Tab1_Status,
 'Tab2' AS tab2_Process,
count(tb2.ID) AS tab2_count,
count(tbp2.ID) AS tab2_Process_count,
CASE WHEN count(tb2.ID)=count(tbp2.ID) THEN 'Equal' ELSE 'Not Equal' END AS Tab2_Status
FROM table1 tb1
LEFT JOIN table1_process tbp1 ON tbp1.ID = tb1.ID
LEFT JOIN table2 tb2 ON tb2.ID = tb1.ID 
LEFT JOIN table1_process tbp2 ON tbp2.ID = tb2.ID
)
UNPIVOT
(
(TABLEPROCESS,TAB_COUNT,PROCESS_COUNT,STATUS)
FOR (t,c,p,s) 
 IN
 (
   (tab1_Process,Tab1_Count,Tab1_Process_Count,Tab1_Status),
   (tab2_Process,Tab2_Count,Tab2_Process_Count,Tab2_Status)

 )
);