Comment faire pour que les valeurs d'une table SQL soient les en-têtes d'une vue?

J'ai une table dans SQL Server 2008 du type suivant:

Headings: 'ClientId' 'FieldName' 'Value' Line1: '1' 'Company Name' 'Company1' Line2: '1' 'Contract Type' 'Year' Line3: '1' 'Login Details' '13546' Line4: '2' 'Company Name' 'Company2' Line5: '2' 'Contract Type' 'Month' Line6: '2' 'Login Details' '46528' Line7: '3' 'Company Name' 'Company3' Line8: '3' 'Contract Type' 'Month' Line9: '3' 'Login Details' '54687' 

J'ai besoin de créer une vue qui montrerait la même information de la façon suivante:

 Headings: 'ClientId' 'CompanyName' 'ContractType' 'Login' Line1: '1' 'Company1' 'Year' '13546' Line2: '2' 'Company2' 'Month' '46528' Line3: '3' 'Company3' 'Month' '54687' 

Je peux get les deux premières colonnes en utilisant la fonction WHERE choisissant une valeur FieldName particulière mais ne peut pas get les autres dans la même vue. Un autre problème est que les en-têtes de sortie ne sont pas les mêmes que dans la table source. Si je comprends bien, les alias SQL doivent être utilisés ici, mais je ne sais pas comment les appliquer pour ce cas.

Comment puis-je faire ceci?

Vous pouvez utiliser le pivot .

 select P.ClientId, P.[Company Name], P.[Contract Type], P.[Login Details] from YourTable pivot (min(Value) for FieldName in ([Company Name], [Contract Type], [Login Details]) ) P 

SQL Fiddle

Vous pouvez utiliser Pivot tel que @Mikael Eriksson réponse peut également utiliser la requête ci-dessous:

 SELECT A.ClientID, B.VALUE AS CompanyName, C.VALUE AS ContractType, D.VALUE AS [Login] FROM (SELECT DISTINCT ClientID FROM yourTable) A LEFT JOIN YourTable AS B ON B.ClientID = A.ClientID AND B.FieldName = 'Company Name' LEFT JOIN YourTable AS C ON B.ClientID = A.ClientID AND C.FieldName = 'Contract Type' LEFT JOIN YourTable AS D ON B.ClientID = A.ClientID AND D.FieldName = 'Login Details'