Oracle
Select Count(*) FROM with-clause-named table order by a, b 不起作用
我在儲存過程中定義了一系列表,最終像這樣返回到應用程序,然後最終生成一個簡單的表,其中包含來自先前定義的表的不同值以及該不同值重複次數的計數。由於某種原因,它似乎不起作用……
…儲存過程…
OPEN p_retcursor FOR WITH r AS (SELECT ... FROM MYDATATABLE), s AS (SELECT ... FROM r WHERE ...) , t AS (SELECT ... WHERE ... JOIN ... ON ... FROM s) SELECT t.*, COUNT(*) as distinctABcount FROM t GROUP BY t.columnA, t.columnB
我怎樣才能讓它工作?我想從技術上講 columnA 和 columnB 不是表的列,而是 t 的列,所以我認為評估的順序有點混亂,因為 t 不是實際的表……查詢在計數附近失敗( *) 列部分,並且可能在 GROUP BY 上失敗。
謝謝。
更新 1:我有一個理論,如果我將所有命名的表串到 from 子句中的子查詢中,它將起作用……但考慮到這個儲存過程有數百行長,這似乎不是一個會產生可讀程式碼的解決方案…
更新 2:
理論是錯誤的,派生表不是問題,但正如答案所指出的,你不能要求比你在 group by 子句中設置的更多的列。我通過更正查詢的最後一部分來修復它,如下所示:
select t.columnA, t.columnB, COUNT(*) as distinctABcount FROM t GROUP BY t.columnA, t.columnB
哪個執行正確。
除非有特定於 Oracle 語法的東西,否則我懷疑您的派生表中的 columnA 和 columnB 不止
t
。如果是這樣,您需要按這些列分組,對它們應用聚合或不要求它們(將 t.* 替換為 t.columnA、t.columnB)