SIDEBAR
»
S
I
D
E
B
A
R
«
Rijen samenvoegen tot een veld
juli 16th, 2009 by Stephan van Rooij

Stel je hebt een database met daarin 2 tabellen die doormiddel van een key aan elkaar zijn gekoppeld. Dan kan het soms voorkomen dat je meerdere rijen uit de ene tabel als veld wil weergeven bij de andere tabel.

Hieronder staat de MSSQL oplossing. Voor deze oplossing maken we een nieuwe “Scalar Function” aan. Deze functie kan je vervolgens aanroepen in je query. Een persoon met een of meerdere lievelingskleuren bijvoorbeeld.
De tabelen zien er als volgt uit.
id naam (Tabel Personen)
1 Jan
2 Piet
3 Sjaak
4 Kees

id persoonId kleur (Tabel Kleuren)
1 1 Rood
2 1 Blauw
3 2 Groen
4 3 Blauw
5 3 Rood
6 3 Groen

We maken de volgende functie aan:

  |  copy code |? 
01
02
CREATE FUNCTION [dbo].[KleurenPerPersoon]
03
(
04
	@persoonId int
05
)
06
RETURNS varchar(max)
07
AS
08
BEGIN
09
declare @output varchar(max)
10
declare @outputNV varchar(max)
11
SELECT @output = COALESCE(@output + '/','') +  dbo.Kleuren.kleur
12
FROM dbo.Kleuren
13
WHERE dbo.Kleuren.persoonId = @persoonId
14
ORDER BY kleur;
15
 
16
SET @outputNV = (SELECT ISNULL(@output,'Geen'));
17
RETURN @outputNV
18
END

Nu we deze functie hebben aangemaakt moeten we hem nog aanroepen vanuit de query. Dat gaat als volgt: Je selecteert de persoon. En je stuurt zijn id naar de goede functie.

  |  copy code |? 
1
2
SELECT Personen.naam, dbo.KleurenPerPersoon(kleuren.id) as lievelingskleuren
3
FROM Personen
4
ORDER BY naam;

Het lijstje wat uit deze query voortkomt is als volgt:
Jan Blauw/Rood
Kees Geen
Piet Groen
Sjaak Blauw/Groen/Rood

De slashes tussen de kleuren staan in de functie. Dat er bij Kees geen staat klopt omdat we in de functie kijken of de waarde iets heeft en anders vervangen we de lege waarde door “Geen”.


Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

»  Substance:WordPress   »  Style:Ahren Ahimsa