J'ai créé une requête SQL dynamique qui joint quelques tables, puis fait pivoter une table appelée Géométries qui stocke les paires nom/valeur. Le SQL est dynamique, car au moment de l'exécution, je ne saurai pas quelles paires nom/valeur doivent pivoter.Colonnes SQL dupliquées dynamiques en mode Pivot
La requête ci-dessous me donne les données dont j'ai besoin, cependant, toutes les colonnes de géométrie sont répertoriées deux fois comme si je pivotais deux fois sur les mêmes données. Je ne peux pas comprendre pourquoi cela arrive. Je soupçonne que cela a à voir avec le fait que je sélectionne les paires Nom/Valeur dans mon expression de table commune qui sélectionne les colonnes Nom/Valeur de la géométrie à la ligne 13 de l'exemple de code ci-dessous: g.Name[Geometry], g.Value
Peut-être coupler cela avec le PIVOT code près du bas provoque les données de colonne en double dans mes résultats de requête?
Je ne peux pas supprimer le code sur la ligne 13, ou le PIVOT échoue avec des erreurs indiquant Géométrie et Valeur ne sont pas des noms de colonne valides.
Quoi qu'il en soit, voici la requête ...
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
SELECT @cols = STUFF((SELECT distinct ',' + QUOTENAME(g.Name)
FROM Geometries g
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
SET @query =
'SELECT *, ' + @cols + '
FROM (
SELECT
r.Id[RunId], rd.Id[RunDataId], r.RunNumber [Run #], r.TestNumber [Test #], r.Description,
rd.data1, rd.data2, rd.data3,
g.Name[Geometry], g.Value
FROM dbo.Runs r
INNER JOIN RunDatas rd ON r.Id = rd.RunId
INNER JOIN RunGeometries rg ON rg.RunId = r.Id
INNER JOIN Geometries g ON g.Id = rg.GeometryId
) as data
PIVOT
(
Max(Value) FOR Geometry IN (' + @cols + ')
) as p'
execute sp_executesql @query
Toute aide pour déterminer ce qui est à l'origine des données en double serait apprécié.
Probablement vos tables et non votre PIVOT. Faites un SELECT DISTINCT r.ID, rd.ID etc ... pour vous assurer que vous n'apportez pas de dupes pour PIVOT – Isaiah3015