Déplacement de colonnes SQL vers des lignes

J'ai besoin de produire des données en tant que jeu de résultats à partir d'une procédure stockée où les colonnes de mes données source sont représentées comme des lignes dans la sortie. Je devrais voir une ligne pour chaque colonne dans ma sortie qui est dans mes données source et je devrais voir une colonne dans ma sortie pour chaque ligne dans mes données source. Je ne vois pas comment je peux le faire en utilisant Pivot ou les autres methods que j'ai examinées.

Une fois que j'ai datatables orientées comme je l'aime, j'imagine que je vais interroger sys.columns pour injecter les noms des colonnes de données source comme la première colonne de ma sortie. J'aurai aussi probablement besoin d'interroger les valeurs de données sources à l'avance qui seront utilisées comme noms de colonnes de sortie. J'imagine un SQL dynamic magnifique dans mon futur mais je peux sortinger tout cela moi-même si nécessaire. Je suis surtout préoccupé par la façon de convertir les colonnes en lignes. Voir ci-dessous:

SELECT ID ,XID ,Amount FROM ( SELECT 11 as ID, 301 as XID, 50001 as Amount UNION ALL SELECT 12 as ID, 302 as XID, 50002 as Amount UNION ALL SELECT 13 as ID, 303 as XID, 50003 as Amount UNION ALL SELECT 14 as ID, 304 as XID, 50004 as Amount ) T1 /* The above query returns this: ID XID Amount ---------------- 11 301 50001 12 302 50002 13 303 50003 14 304 50004 Instead I would like to see this: Column 11 12 13 14 ----------------------------------- ID 11 12 13 14 XID 301 302 303 304 Amount 50001 50002 50003 50004 */ 

En supposant que vous avez besoin de Dynamic.

 Declare @SQL varchar(max) = Stuff((Select Distinct ',' + QuoteName(ID) From Yourtable Order by 1 For XML Path('')),1,1,'') Select @SQL = ' Select [Column],' + @SQL + ' From ( Select B.* From YourTable A Cross Apply ( Values (1,''ID'' ,ID,ID) ,(2,''XID'' ,ID,XID) ,(3,''Amount'',ID,Amount) ) B ([Seq],[Column],[Item],[Value]) ) A Pivot (sum(Value) For [Item] in (' + @SQL + ') ) p Order By [Seq] ' Exec(@SQL); 

Résultats

entrez la description de l'image ici

Si vous n'avez pas besoin de dynamic

 Select [Column],[11],[12],[13],[14] From ( Select B.* From YourTable A Cross Apply ( Values (1,'ID' ,ID,ID) ,(2,'XID' ,ID,XID) ,(3,'Amount',ID,Amount) ) B ([Seq],[Column],[Item],[Value]) ) A Pivot (sum(Value) For [Item] in ([11],[12],[13],[14]) ) p Order By [Seq]