2014-09-03 64 views
0

我得到了下面的SQL火鳥1.5:集團通過最大值

SELECT GEP.KOD, GEP.IRSZ, GEP.VAROS, GEP.UTCA, GEP.UGYINT, GEP.EMELET, CIKK.NEV, 
GEPELEM.SZAMLALO FROM GEP LEFT JOIN CIKK ON GEP.CIKK = CIKK.KOD LEFT JOIN GEPELEM ON 
GEPELEM.KOD = GEP.KOD WHERE CEG = 27013 
GROUP BY GEPELEM.SZAMLALO, GEP.KOD, GEP.IRSZ, GEP.VAROS, GEP.UTCA, GEP.UGYINT, GEP.EMELET, CIKK.NEV 

,我想利用其現有的最大值由GEPELEM.SZAMLALO組...
如果我用語句刪除組和只有GEP.ELEM.SZAMLALO仍然存在,它給出了一個錯誤

[Error Code: 335544569, SQL State: 42000] GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -104 
Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause) 

如果我使用MAX()函數在SELECT導致它什麼都不做。在SQL運行,但結果並沒有改變
如果我在組中使用MAX()的原因,在選擇:

[Error Code: 335544569, SQL State: 42000] GDS Exception. 335544569. Dynamic SQL Error 
SQL error code = -104 
Token unknown - line 2, column 11 
max 

同樣的錯誤,如果我的事業只有在集團使用它..

這是firebird 1.5.6(沒有選擇升級),我來自MySQL背景。

+1

「我想利用其通過GEPELEM.SZAMLALO組最大值可用「。我不明白你想做什麼。嘗試用樣本數據和期望的結果編輯問題。 – 2014-09-03 12:11:22

回答

2

添加的where子句中的JOIN條件,而不是在where子句中,假設CEG在GEPELEM表,請嘗試以下.....

SELECT GEP.KOD 
    , GEP.IRSZ 
    , GEP.VAROS 
    , GEP.UTCA 
    , GEP.UGYINT 
    , GEP.EMELET 
    , CIKK.NEV 
    , MAX(GEPELEM.SZAMLALO) 
FROM GEP 
LEFT JOIN CIKK  ON GEP.CIKK = CIKK.KOD AND GEP.CEG = 27013 
LEFT JOIN GEPELEM ON GEPELEM.KOD = GEP.KOD 
GROUP BY GEP.KOD 
    , GEP.IRSZ 
    , GEP.VAROS 
    , GEP.UTCA 
    , GEP.UGYINT 
    , GEP.EMELET 
    , CIKK.NEV 
+0

CEG在GEP表格中,但它工作正常,但我不明白它爲什麼起作用......請你解釋一下嗎? – NaGeL182 2014-09-03 12:22:23

+0

當你在一個只存在於一個表中的列上使用一個外部聯接並過濾掉where條件的某些行時,它將爲另一個表爲null,因此它基本上將你的外部聯接轉換爲內部聯接,同時你也希望Max列,然後您嘗試將該列添加到您的組中,如果您希望列的最大值/最小值/平均值,您將按照選擇查詢中的所有列進行分組,除了您在任何聚合函數Min/Max/Avg/Sum/Count ..... – 2014-09-03 12:29:28

+0

@ M.Ali我不認爲將'CEG'移動到連接條件是正確的(現在所有的'GEP'行都會返回,而不是隻返回'CEG = 27013')。 MAX的加入可能是所有必要的。 – 2014-09-03 12:34:36