【发布时间】:2021-09-23 07:38:11
【问题描述】:
我有一张像下面这样的表格
| Process_1 | Tab1_Count | Tab1_Process_Count | Tab1_Status | Process_2 | Tab2_Count | Tab2_Process_Count | Tab2_Status |
|---|---|---|---|---|---|---|---|
| Tab1_Process | 123 | 123 | Equal | Tab2_Process | 123 | 126 | Not Equal |
我正在尝试像下面这样对上面的内容进行 Unpivot
| TABLEPROCESS | Tab_Count | Process_Count | Status |
|---|---|---|---|
| Tab1_Process | 123 | 123 | Equal |
| Tab2_Process | 123 | 123 | Not Equal |
使用以下查询
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新手,请帮忙
【问题讨论】:
-
它给你什么错误?实际上,它会抛出 ORA-00936,因为您在内部查询中有一个额外的
select。我认为,修复后 unpivot 将抛出 ORA-01790。您首先说您有一个表,但这实际上似乎是内部查询的结果;可能有其他方法可以直接从基表中获取您想要的结果。 -
嗨@AlexPoole 额外的 SELECT 是拼写错误,我得到的错误是 ORA-00907:缺少右括号