ORA-00979不是按表達式分組我通過以下查詢獲得ORA-00979:SELECT cr.review_sk, cr.cs_sk, cr.full_name,tolist(to_char(cf.fact_date, 'mm/dd/yyyy')) "appt",cs.cs_id, cr.tracking_numberfrom review cr, cs, fact cfwhere cr.cs_sk = cs.cs_skand UPPER(cs.cs_id) like '%' || UPPER(i_cs_id) || '%'and row_delete_date_time is nulland cr.review_sk = cf.review_wk (+)and cr.fact_type_code (+) = 183050GROUP BY cr.review_sk, cr.cs_sk, cf.fact_date, cr.tracking_numberORDER BY cs.cs_id, cr.full_name;我找不到在同一查詢中同時包含GROUP BY和ORDER BY子句的任何示例。我嘗試一次一個地從組中刪除每個字段,但仍然得到相同的錯誤。
4 回答

叮當貓咪
TA貢獻1776條經驗 獲得超12個贊
你必須把的所有列SELECT的GROUP BY或使用的壓縮結果為單一值(如對他們的功能MIN,MAX或SUM)。
一個簡單的例子來理解為什么會發生這種情況:想象一下,你有一個像這樣的數據庫:
FOO BAR
0 A
0 B
并在運行SELECT * FROM table GROUP BY foo。這意味著數據庫必須返回單行作為結果,第一列0才能完成,GROUP BY但現在有兩個值bar可供選擇。你期望哪個結果 - A或者B?或者數據庫是否應該返回多行,違反了合同GROUP BY?

心有法竹
TA貢獻1866條經驗 獲得超5個贊
太糟糕了,Oracle有這樣的局限性。當然,不在GROUP BY中的列的結果將是隨機的,但有時您需要它。愚蠢的Oracle,你可以在MySQL / MSSQL中做到這一點。
但是有一個解決Oracle的工作:
雖然以下行不起作用
SELECT unique_id_col, COUNT(1) AS cnt FROM yourTable GROUP BY col_A;
您可以使用類似下面的0來欺騙Oracle,以使您的列保持在范圍內,但不能將其分組(假設這些是數字,否則使用CONCAT)
SELECT MAX(unique_id_col) AS unique_id_col, COUNT(1) AS cnt FROM yourTable GROUP BY col_A, (unique_id_col*0 + col_A);
添加回答
舉報
0/150
提交
取消