Morloff - Nieuws - Optellen van BIT velden in SQL
Optellen van BIT velden in SQL
30-07-2012 | Marcel van Langen | SQL Server | BIT, SQL Server, optellen
Stel je hebt een tabel waarbij je via BIT velden gegevens bijhoudt. Het kan voorkomen dat je wilt tellen hoeveel van die BIT velden nu eigenlijk op TRUE zijn gezet. In mijn geval ging het om een SQL database, waarbij per dagdeel werd bijgehouden of er iemand al dan niet aanwezig was. Iedere dag werd verdeeld in 4 dagdelen (ochtend, middag, avond, nacht).
Dat betekende dat de tabel in totaal 28 BIT velden bevatte per medewerker. Een rapport moest per dag per medewerker aangeven hoeveel dagdelen hij die dag aanwezig was. Het was kortom nodig om gegroepeerd de BIT velden die op TRUE waren gezet bij elkaar op te tellen. Maar, hoe doe je dat nu eigenlijk in SQL? Omdat ik dit ook nog niet eerder nodig had gehad, was hiervoor een korte online zoektocht nodig. De sleutel hiervoor is het omzetten van de BIT velden naar INT velden, zodat deze konden worden opgeteld. De oplossing zag er in mijn geval dan ook globaal als volgt uit (voor de overzichtelijkheid heb ik alleen de maandag totalen opgenomen, leesbare veldnamen opgenomen, een specifiek medewerker ID vermeld en de groepering weggelaten):
CONVERT(int, maandag_dagdeel_1) +
CONVERT(int,maandag_dagdeel_2) +
CONVERT(int, maandag_dagdeel_3) +
CONVERT(int, maandag_dagdeel_4)
AS maandag_aanwezigheid
FROM aanwezigheid
WHERE medewerker_id = 12
Op deze manier krijg je voor de medewerker met id 12 een getal tussen de 0 en de 4 terug. Dit getal staat voor het aantal dagdelen dat die medewerker op de maandag aanwezig is. Deze query is eenvoudig aan te passen en uit te breiden naar eigen behoefte.