J'ai une table qui contient une collection de champs dans une seule colonne, j'essaie de la construire pour une vue correcte de chaque champ dans sa propre rangée, comme le suivant exemple:T-SQL Plusieurs auto-jointures dans une boucle
T_data:
+------+---------+---------+
| ID | Field | Value |
+------+---------+---------+
| 1 | Name | John |
| 1 | Age | 41 |
| 1 | Height | 181 |
| 2 | Name | Kelly |
| 2 | Age | 42 |
| 2 | Height | 165 |
| 3 | Name | Dan |
| 3 | Age | 43 |
| 3 | Height | 169 |
+------+---------+---------+
T_result:
+--------+--------+--------+--------+
| Name | John | Kelly | Dan |
| Age | 41 | 42 | 43 |
| Height | 181 | 165 | 169 |
+--------+--------+--------+--------+
Je sais comment faire cela dans l'exemple avec trois auto-jointures sur la même table, mais cela est juste un exemple simplifié, mes données auront un nombre inconnu des ID et des champs - J'ai besoin de les parcourir d'une façon ou d'une autre et de les rejoindre dans une table dynamique. Comment pourrais-je atteindre mon résultat?
Ce genre est-ce que j'ai à l'esprit (ne fonctionne pas):
with #T_id as (
select distinct ID, row_number() over (order by ID asc) as rn form T_data)
-- here's where I need to loop through the IDs
-- Pseudo-code ... I know the following doesn't work
while @i <= (select count(*) from #T_id)
begin
select T_data.Field, T_data.Value from T_data
left join T_result on T_data.Field = T_result.Field
where T_data.ID = (select ID from #T_id where rn = @i)
end
Edit: Le résultat final est destiné à une procédure stockée à utiliser par le Reports Server.
Toute aide sera appréciée :)
Google 'pivot dynamique dans le serveur SQL. Cela devrait vous aider à démarrer. – dfundako
il semble que vous essayez de générer du SQL pour lire un nombre illimité d'attributs à partir de tables - voulez-vous utiliser SQL pour générer ce SQL (vous pouvez générer du SQL en SQL, puis exécuter le SQL), ou allez-vous générer la commande SQL dans un langage de programmation? Une autre approche consiste à créer une boucle ou un curseur qui lit les données, les insère dans une table temporaire, puis interroge finalement la table temporaire. Ou cherchez-vous une table PIVOT, ce qui semblerait mieux si vous pouviez le faire – Cato