sql >> Database teknologi >  >> RDS >> Sqlserver

Aggregeret funktionsfejl under brug af gruppe efter klausul i SQL

Fejlen er ret åbenlys. De uaggregerede kolonner i SELECT af en aggregeringsforespørgsel skal matche nøglerne. I din forespørgsel, BILLDATE er ikke aggregeret, og det er ikke en nøgle.

Den enkle rettelse er:

SELECT BILLNO, BILLDATE,
       SUM(QTY) AS SUMQTY,
       SUM(AMOUNT) AS SUMAMOUNT
FROM PURCHASE
GROUP BY BILLNO, BILLDATE;

Hvis du kun ønsker én række pr. BILLNO -- eller hvis du kender det BILLDATE er den samme for alle BILLNO -- så kan du bruge en aggregeringsfunktion i stedet:

SELECT BILLNO, MAX(BILLDATE) as BILLDATE,
       SUM(QTY) AS SUMQTY,
       SUM(AMOUNT) AS SUMAMOUNT
FROM PURCHASE
GROUP BY BILLNO;


  1. Opdel en række baseret på en kolonneværdi

  2. Aktiver ODP.Net-logning

  3. MySQL Deadlock med en insert, der hæver en trigger

  4. ODP.NET / EF6 - CHAR-datatype i WHERE-klausul