HAVING oder WHERE



  • hallo hallo

    ich raff nicht ganz, wie es heissen müsste, dass man das berechnete feld als Filter nehmen kann.

    SELECT id, iif(option1=1 , pflege1, 0) + iif(option2=1 , pflege2, 0) AS gesamtpflege FROM tabelle ....
    
    WHERE gesamtpflege > 0
    

    oder

    HAVING gesamtpflege > 0
    

    1. führt zu

    1 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.
    

    bzw 2. zu:

    HAVING-Klausel (gesamtpflege>0) ohne Gruppierung oder Aggregatfunktion
    

    DBMS ist in diesem testfall Access

    Über Hinweise würd ich mich freuen.. Danke



  • Bin nicht so der Access-Spezi, aber zumindest im SQL-Server 2000 ging sowas auch nicht. Und da beides von Microsoft ist ...

    So sollte es:

    SELECT id, iif(option1=1 , pflege1, 0) + iif(option2=1 , pflege2, 0) AS gesamtpflege FROM tabelle
    WHERE iif(option1=1 , pflege1, 0) + iif(option2=1 , pflege2, 0) > 0
    

    In MySQL geht das



  • HAVING ohne GROUP BY ist Quatsch.
    Berechnete Felder berechnet man in der WHERE neu, also ganz so wie illuminator schreibt, bloss mit WHERE statt HAVING.
    Und ich würde nochmal klammern, also

    SELECT id, iif(option1=1 , pflege1, 0) + iif(option2=1 , pflege2, 0) AS gesamtpflege FROM tabelle
    WHERE (iif(option1=1 , pflege1, 0) + iif(option2=1 , pflege2, 0)) > 0
    

    Man kann aber auch einfach ein sub-select nehmen:

    SELECT id, gesamtpflege FROM (
        SELECT id, iif(option1=1 , pflege1, 0) + iif(option2=1 , pflege2, 0) AS gesamtpflege
        FROM tabelle
        ) AS my_aliasname
    WHERE gesamtpflege > 0
    


  • hustbaer schrieb:

    HAVING ohne GROUP BY ist Quatsch.

    ups, hab ich doch tatsächlich das GROUP BY vergessen bzw. WHERE

    my bad


Anmelden zum Antworten