2016-09-29 130 views
1

我正在使用Firebird SQL。下面提到的查詢返回4行,如圖所示。錯誤:選擇列表中的表達式無效(未包含在聚合函數或GROUP BY子句中)

SELECT a.EPS_ID,b.C_NAME,c.AY_YR_NAME,d.S_NAME,e.E_NAME 
FROM 
    TBLEXAMPLANNER_S_MSB a, 
    TBLCLASS_MSB b, 
    TBLACADEMICYEAR_MSB c, 
    TBLSUBJECTS_MSB d, 
    TBLEXAMTYPE_MSB e 
WHERE 
    a.EPS_CLASS_ID=b.C_ID 
AND a.EPS_SESSION_ID=c.AY_ID 
AND a.EPS_SUB_ID=d.S_ID 
AND a.EPS_PE_ID=e.E_ID 

click to view image

我希望它僅僅返回1(一)像

EPS_ID  C_NAME AY_YR_NAME S_NAME E_NAME 
--------------------------------------------------- 
7   5   2016-2017 English FA1 

我使用下面的查詢行,但它不工作。

SELECT a.EPS_ID,MAX(b.C_NAME) AS XT,c.AY_YR_NAME,d.S_NAME,e.E_NAME 
FROM 
    TBLEXAMPLANNER_S_MSB a, 
    TBLCLASS_MSB b, 
    TBLACADEMICYEAR_MSB c, 
    TBLSUBJECTS_MSB d, 
    TBLEXAMTYPE_MSB e 
WHERE 
    a.EPS_CLASS_ID=b.C_ID 
AND a.EPS_SESSION_ID=c.AY_ID 
AND a.EPS_SUB_ID=d.S_ID 
AND a.EPS_PE_ID=e.E_ID 
GROUP BY a.EPS_ID,d.S_NAME 

的錯誤信息是:

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)

+0

你嘗試SELECT DISTINCT – gherkin

+0

我也不能夠讓DISTINCT工作與我的查詢:( –

+0

由於錯誤消息說,您需要列表提供給中使用任何列' 「GROUP BY」表達式中的SELECT列表(不是聚合) – oals

回答

4

使用GROUP BY使發動機記錄爲你。要進行分組,你必須給RDBMS建議每個列,它應該做什麼。

  • 集團呢? - >向GROUP BY-Clause添加列
  • 不是分組嗎? - >好的,還有什麼?
    • 忽略列?從你的select-clause中刪除它
    • 總結一下吧? - >使用SUM(mycol)
    • 其他聚合函數可以在documentation

另外發現:在你的情況,你通過EPS_ID,這是每行中唯一嘗試組。因此,按該列分組的分組將返回所有行,因爲沒有任何內容需要分組。要對記錄進行分組,他們必須具有與相同的值。

0

瞭解如何使用正確的,明確的JOIN語法。

您的問題是所有不聚集列必須在GROUP BY

SELECT a.EPS_ID, MAX(b.C_NAME) AS XT, c.AY_YR_NAME, d.S_NAME, e.E_NAME 
FROM TBLEXAMPLANNER_S_MSB a JOIN 
    TBLCLASS_MSB b 
    ON a.EPS_CLASS_ID = b.C_ID JOIN 
    TBLACADEMICYEAR_MSB c 
    ON a.EPS_SESSION_ID = c.AY_ID JOIN 
    TBLSUBJECTS_MSB d 
    ON a.EPS_SUB_ID = d.S_ID JOIN 
    TBLEXAMTYPE_MSB e 
    ON a.EPS_PE_ID = e.E_ID 
GROUP BY a.EPS_ID, c.AY_YR_NAME, d.S_NAME, e.E_NAME; 

注:我也建議你使用表縮寫表的別名。所以,epTBLEXAMPLANNER_S_MSB而不是a。任意表別名使查詢很難遵循。

+0

謝謝@戈登,但它仍然顯示我4行,如附圖所示 –

-1

嘗試

SELECT a.EPS_ID,c.AY_YR_NAME,d.S_NAME,e.E_NAME,MAX(b.C_NAME) AS XT ... 
GROUP BY 1,2,3,4 
+1

雖然這段代碼可能有助於解決問題,但它並沒有解釋_why_和/或_how_它回答了這個問題。提供這種附加背景將顯着提高其長期教育價值。請[編輯]您的答案以添加解釋,包括適用的限制和假設。 –

相關問題