Oracle

Select Count(*) FROM with-clause-named table order by a, b 不起作用

  • December 12, 2012

我在儲存過程中定義了一系列表,最終像這樣返回到應用程序,然後最終生成一個簡單的表,其中包含來自先前定義的表的不同值以及該不同值重複次數的計數。由於某種原因,它似乎不起作用……

…儲存過程…

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)

引用自:https://dba.stackexchange.com/questions/30237