sql >> Database teknologi >  >> RDS >> Mysql

Sådan laver du en SQL-anmodning ved hjælp af CASE

Der er så mange ting galt, det er svært at vide, hvor man skal begynde.

Du blander de to former for CASE udtryk. En formular er:

CASE <expression>
    WHEN <value> THEN <result>
    WHEN <value> THEN <result>
    ...
END

den anden er:

CASE
    WHEN <condition> THEN <result>
    WHEN <condition> THEN <result>
    ...
END

Du forsøger at bruge en SELECT forespørgsel som en værdi, men den mangler FROM klausul, og du skal pakke en forespørgsel i parentes for at bruge den som en værdi. Jeg formoder, at du ville have dette til at forespørge fra den samme tabel, i hvilket tilfælde du ikke skulle lave en underforespørgsel, du skulle bare bruge aggregeringsfunktionen i hovedforespørgslen.

CASE udtryk skal være en del af SELECT liste, ikke efter FROM klausul.

Hvis du vil oprette separate kolonner i outputtet for hver sag, kan de ikke være i én CASE udtryk.

Du har alle dine tabel- og kolonnenavne i dobbelte anførselstegn, MySQL bruger backticks til at citere navne.

Du behøver ikke SELECT DISTINCT når du bruger GROUP BY .

Du kan ikke henvise til et alias i SELECT liste i den samme forespørgsel, undtagen i GROUP BY , ORDER BY , og HAVING .

Det skal være:

SELECT MONTH(Facturation) AS month, LRU, Client,
    AVG(CASE WHEN MONTH(Factuation) = 1 AND Facturation BETWEEN 1 AND 6
        THEN Montant_fac_eur END) AS c1,
    AVG(CASE WHEN MONTH(Factuation) = 2 AND Facturation BETWEEN 2 AND 7
        THEN Montant_fac_eur END) AS c2,
    AVG(CASE WHEN MONTH(Factuation) = 3 AND Facturation BETWEEN 3 AND 8
        THEN Montant_fac_eur END) AS c3,
    AVG(CASE WHEN MONTH(Factuation) = 4 AND Facturation BETWEEN 4 AND 9
        THEN Montant_fac_eur END) AS c4,
    ...
FROM foundry_sync.data
GROUP BY `LRU`, `Client`, `Facturation`
ORDER BY Client, month


  1. Henter rå SQL-forespørgselsstreng fra PDO-forberedte sætninger

  2. Hvordan får man størrelsen på tabellerne i en MySQL-database?

  3. pyodbc håndterer ikke unicode-data korrekt

  4. Sådan ændres baggrundsfarven for en formular i Access 2016