[SQL] tabel joinen als kolom

Pagina: 1
Acties:

  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
Ik ben op zoek naar het volgende. In onze database zijn personen gekoppeld aan (mogelijk meerdere) groepen. Om een overzicht te krijgen van de personen en hun groepen wil ik deze gegevens uit de database halen. Dit lukt als ik een join gebruik:
SQL:
1
2
3
4
5
6
select *
from personen p
inner join persoongroepkopppelingen pg
    on p.PersoonID = pg.PersoonID
inner join groepen g
    on pg.GroepID = g.GroepID

Het probleem wat ik nu heb is dat deze query voor ieder persoon meerdere records teruggeeft, nl per groep. Wat ik wil is dat er per persoon maar 1 record opgeleverd wordt, en de koppeling met groepen als kolommen in dat record wordt opgeleverd, zoiets als dit:
SQL:
1
2
3
4
5
6
7
select  *
,   isNull((Select 1
    from persoongroepkopppelingen pg
    where p.PersoonID = pg.PersoonID
    and pg.GroepID = -1123  --bijvoorbeeld voor groep -1123
    ), 0) as "-1123"
from personen_v02 p

In onderstaand voorbeeld wordt dit alleen voor groep met id -1123 gedaan, maar ik wil dus voor alle groepen zien of de persoon eraan gekoppeld is of niet.

Heeft iemand ideeen? Een oplossing zou zijn om hier een tijdelijke tabel voor aan te maken, maar het mooiste zou zijn als dit in 1 (of een paar, het komt toch in een SP) queries kan.

ik zat al te denken om bovenstaand voorbeeld te gebruiken met het "as" statement als dynamisch, maar dat gaat ook niet werken. zoiets als dit:
SQL:
1
select data as data2 from tabel1 --waarbij data2 dus een kolom met data uit tabel1 is

Problem Exists Between Chair And Keyboard


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Ik denk dat dit je wel verder helpt:
http://www.sqlteam.com/item.asp?ItemID=2368

Oops! Google Chrome could not find www.rijks%20museum.nl


  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
OK, als komma delimited string de groepID's als aparte kolom opgeven. Dit werkt op zich wel, maar ik zou graag de groepID's in aparte kolommen hebben.

Problem Exists Between Chair And Keyboard


  • P_de_B
  • Registratie: Juli 2003
  • Niet online
Dan moet je een pivot-table query gebruiken. Een goed voorbeeld kun je vinden op SQLTeam.com. Zoek maar eens op Pivot

Oops! Google Chrome could not find www.rijks%20museum.nl


  • majornono
  • Registratie: Juni 2002
  • Laatst online: 04-04 23:16
Bedankt, dat is werkelijk exact(!) wat ik zoek. Ik ga het implementeren

Problem Exists Between Chair And Keyboard