2017-06-13 126 views
-2

我似乎得到這個錯誤試圖運行下面的查詢:SQL查詢不工作

SELECT 
to_char(EFFECTIVE_DT,'YYYY-MM') as YYYYMM, 
--EFFECTIVE_DT, 
AH01_PAYMENT_STATUS_CTD, 
TSYS_ACCT_ID 
FROM OIS_TSYS.AH_CYCLE_HIST 
WHERE 1=1 
AND EFFECTIVE_DT BETWEEN '01-MAY-2017' AND '31-MAY-2017' 
GROUP BY 2 
ORDER BY 1 

錯誤:ORA-00979:不是GROUP BY表達式

我想按日期進行分組,因爲目前我每天爲每個個人賬戶獲得結果。

Result set: 
65589 N 03-MAY-17 
65590 S 03-MAY-17 
65591 M 03-MAY-17 
65592 F 03-MAY-17 
65617 G 03-MAY-17 

任何幫助是驚人的。

最佳, 薩阿德

+3

您的結果集與查詢不符?另外,你爲什麼分組2?這意味着你正在按字面值2分組,這意味着所有行將在組中。這有點毫無意義\ *。特別是因爲你沒有任何東西可以聚合 - 不存在count/max/min函數。也許你打算區分? \ **分組依據不理解對選定列的位置參考,因爲它是在考慮列列表之前計算的。* – Boneist

+0

分組2 表示您按選擇語句 –

+1

@EstebanP的第二列進行分組。 - Oracle不允許按位分組。只有'order by'才能識別。 (您可以通過不在選擇列表中的列進行分組,以便開始......但我想您也可以按順序排列。) –

回答

0

當 「基團通過2」 時,所有其他列必須具有一個聚集函數等(SUM,AVG,最小值,最大值,..)

的「1 = 1 「是相當無用的

+0

謝謝。如果我只是1分組呢? –

+0

你期望結果如何? 你爲什麼要分組你的結果? 請記住:所有不在您的group by子句中的列必須具有彙總函數,例如sum/avg/min/max –

+0

我希望結果集看起來像這樣65589 N MAY -17 65590 S MAY- 17 65591 M MAY -17 65592 F MAY -17 65617 G MAY-17(按月份,例如5月,它給我S中的賬戶數量,然後M,然後F等) –

0

要獲得所需的結果,請使用以下查詢: 在任何查詢中應用group by子句時,如果select子句中有多個colum,則不能只在group by子句中放置一列除了總和功能,如總和,計數,最小值,最大值等,所以在你的情況下,你必須把所有三個您在select子句中選擇的組中的列。

SELECT 
    TSYS_ACCT_ID, 
    AH01_PAYMENT_STATUS_CTD, 
    to_char(EFFECTIVE_DT,'YYYY-MM') as YYYYMM 
    FROM OIS_TSYS.AH_CYCLE_HIST 
    WHERE EFFECTIVE_DT BETWEEN '01-MAY-2017' AND '31-MAY-2017' 
    GROUP BY 
    TSYS_ACCT_ID, 
    AH01_PAYMENT_STATUS_CTD, 
    to_char(EFFECTIVE_DT,'YYYY-MM') 
    ORDER BY 1