2016-08-03 2 views
0

ich die folgende Fehlermeldung auf der unten kopiert Abfrage erhalten:Ein Aggregat kann nicht in einer ON-Klausel erscheinen, es sei denn

Ein Aggregat kann nicht in einer ON-Klausel erscheinen, wenn es in einer Unterabfrage in einer HAVING-Klausel enthalten ist, oder Liste auswählen, und die Spalte, die aggregiert wird, ist eine äußere Referenz.

Da es keine 1 zu 1 auf d.VCMN und h.VDMN beitreten möchte ich mich auf d.VCMN beitreten < = max (h.VDMN) für diesen h.P_ID, b.S_U_ID

Wie richte ich ein SQL für diese Situation ein?

SELECT DISTINCT H.P_ID 
    ,B.S_U_ID 
    ,H.vdmn 
    ,D.VCMN AS VCMN _d 
    ,C.I_A_ID 
    ,D.I_A_V_ID 
FROM PSH H 
LEFT JOIN PSU B ON h.SH_ID = B.SH_ID 
LEFT JOIN PPA C ON b.UA_ID = C.PA_ID 
LEFT JOIN PIA_V D ON c.IIA_ID = d.IA_ID 
    AND D.VCMN <= max(H.VDMN) 
+0

Bitte geben Sie Beispieldaten und gewünschte Ergebnisse an. Ihre Anfrage lässt viel Interpretationsspielraum offen. Ich sollte hinzufügen, dass die Verwendung von 'Select distinct' mit mehreren Joins auch sehr verdächtig ist. –

+2

Verwenden Sie eine sub.query, d. H. '... <= (wählen Sie max (VDMN) FROM ...)' – jarlh

+0

wenn Sie sagen, max (H.VDMN) - über welche Gruppe möchten Sie den MAX wissen? – Cato

Antwort

0

Vielleicht beabsichtigen Sie so etwas wie dieses:

From (select h.*, max(vdmn) over (partition by sh_id) as max_vdmn 
     from PSH H 
    ) h left join 
    PSU B 
    on h.SH_ID = B.SH_ID left join 
    PPA C 
    on b.UA_ID = C.PA_ID left join 
    PIA_V D 
    on c.IIA_ID = d.IA_ID and D.VCMN <= h.max_vdmn 

Die partition by sh_id ist nur eine Vermutung auf, was Sie erreichen möchten. Es ist wahrscheinlich, dass einige partition by dieses spezielle Syntaxproblem lösen können.

Verwandte Themen