Toevoegen van extra rij met totalen in SQL Server

Wanneer je een recordset in SQL Server ophaalt met numerieke waarden (bijvoorbeeld factuurbedragen of aantal views), kan het voorkomen dat je ook een rij met totalen wilt. Regelmatig wordt dit door ontwikkelaars opgelost in de programmatuur die de recordset ontvangt (ColdFusion, PHP etc.), maar de regel kan ook eenvoudig worden toegevoegd aan de recordset zelf.

De oplossing is gelegen in een extensie van GROUP BY, namelijk WITH ROLLUP. Wanneer je dit gebruikt, wordt aan de recordset (standaard als eerste regel), een extra regel toegevoegd met daarin het totaal. Hieronder geven we een voorbeeld, onderaan het artikel staan een paar aandachtspunten bij het gebruik van WITH ROLLUP. Maar eerst een fictieve query ter verduidelijking.


SELECT		countryName, MAX(sheepAmount) AS maxAmountSheep
FROM			tblCountry
					INNER JOIN tblSheep ON tblCountry.countryId = tblSheep.countryId
GROUP BY	countryName WITH ROLLUP
ORDER BY		countryName ASC
			

De eerste regel van de resulterende recordset bevat de waarde NULL in de kolom countryName en in de kolom maxSheep het totaal van alle overige regels. Misschien vind je het vervelend dat in de kolom countryName de waarde NULL is opgenomen. De oplossing hiervoor is door de SELECT regel als volgt aan te passen:


SELECT		IsNull(countryName,'TOTAL'), MAX(sheepAmount) AS maxAmountSheep
			

Een paar aandachtspunten voor het goed gebruiken van WITH ROLLUP:

  • groepeer je op meerdere velden, dan krijgt ieder veld uit de groepering ook een regel met totalen
  • ROLLUP werkt niet goed met HAVING, omdat de totalen eerst worden berekend, en pas daarna de HAVING clause wordt doorgevoerd. Wanneer de HAVING clause regels uit de recordset verwijderd, klopt de totaalregel niet meer.

Over mij

Mijn naam is Marcel van Langen. Ik ben werkzaam als freelancer. Een harde en eerlijke werker, met een passie voor doelgerichte oplossingen. Ik voer al jaren mooie klussen uit voor geweldige klanten. Mijn technische specialisaties zijn het Thinkwise platform, SQL Server en ColdFusion development.

Lees verder...
Diensten