j'ai une table où chaque enregistrement représente une personne et il y a beaucoup de colonnes utilisées pour indiquer quels événements ils ont assisté:Conversion ligne unique en plusieurs lignes basées sur des valeurs dans les colonnes
CREATE TABLE EventAttendees
(
Person VARCHAR(100),
[Event A] VARCHAR(1),
[Event B] VARCHAR(1),
[Event C] VARCHAR(1)
)
INSERT INTO EventAttendees
SELECT 'John Smith','x',NULL,NULL
UNION
SELECT 'Jane Doe',NULL,'x','x'
UNION
SELECT 'Phil White','x',NULL,'x'
UNION
SELECT 'Sarah Jenkins','x','x','x'
qui ressemble à ceci par exemple :
SELECT * FROM Event Attendees
/---------------|---------|---------|---------\
| Person | Event A | Event B | Event C |
|---------------|---------|---------|---------|
| John Smith | x | NULL | NULL |
| Jane Doe | NULL | x | x |
| Phil White | x | NULL | x |
| Sarah Jenkins | x | x | x |
\---------------|---------|---------|---------/
Je veux générer une liste des personnes qui a assisté à quels événements, donc ma sortie désirée est:
/---------------|---------|
| Person | Event |
|---------------|---------|
| John Smith | Event A |
| Jane Doe | Event B |
| Jane Doe | Event C |
| Phil White | Event A |
| Phil White | Event C |
| Sarah Jenkins | Event A |
| Sarah Jenkins | Event B |
| Sarah Jenkins | Event C |
\---------------|---------/
En réalité, j'ai beaucoup plus de 3 événements, mais ce qui précède est pour faciliter l'explication (Ceci est pas une question de devoirs btw). Comme les événements pourraient changer à l'avenir et que je n'ai aucun contrôle sur les données que je suis en train de transmettre, j'ai vraiment besoin d'une solution dynamique capable de gérer n'importe quel nombre de colonnes d'événements possibles.
Je suppose que je peux faire quelque chose avec UNPIVOT
, mais je ne peux tout simplement pas comprendre, ou trouver un bon exemple sur SO ou ailleurs de travailler - quelqu'un peut-il aider?
Mais si j'ai 200 colonnes Event, j'ai besoin de 200 sous-requêtes 'UNION'ed ensemble? Je cherche un moyen de le faire dynamiquement si possible. – 3N1GM4
générez-vous une nouvelle colonne pour chaque nouvel événement? – Yeou
Je ne suis pas personnellement, mais l'ensemble de données que je suis passé le fait de cette façon, oui. – 3N1GM4