SQL
select * from
(select status, count(*) from test1
where trunc(update_ts) = trunc(sysdate) and status in ('ACK','NACK')
group by status)
union
(select 'SENT' as status, count(*) from test1
where trunc(update_ts) = trunc(sysdate)
)
order by decode(status, 'SENT', 1, 'ACK', 2, 'NACK', 3)
錯誤
ORA-01785: ORDER BY 專案必須是 SELECT 串列運算式的編號
- 00000 - "ORDER BY item 必須是 SELECT-list 運算式的編號"
uj5u.com熱心網友回復:
您遇到了操作順序問題。使用聯合時,如果要對整個聯合資料集進行排序,則需要在該資料集周圍加上括號,將其視為子查詢。
您在查詢中有效寫的是
SELECT something
FROM a union b
ORDER BY column
那只是無效的 SQL 并且評估不好,導致您的錯誤訊息。如果你用括號包裹聯合,資料庫引擎將聯合視為子查詢。
SELECT something
FROM (SELECT column FROM a UNION SELECT column FROM b)
ORDER BY column
如果您用括號中的整個子查詢重寫查詢,它將運行良好。
select * from
(select status, count(*)
from test1
where trunc(update_ts) = trunc(sysdate) and status in ('ACK','NACK')
group by status
union
select 'SENT' as status, count(*)
from test1
where trunc(update_ts) = trunc(sysdate)
)
order by decode(status, 'SENT', 1, 'ACK', 2, 'NACK', 3)
注意:我在 Oracle 檔案中找不到關于此的特定檔案。有很多針對各種資料庫平臺的在線示例,但我認為沒有什么是“官方的”。
附帶說明一下,始終為子查詢設定別名是一個好習慣。Oracle 不關心它是否有別名,但其他 RDBMS 平臺會。如果您現在養成習慣,過渡到使用其他資料庫平臺會更容易。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/522710.html
標籤:sql甲骨文
