Joignez datatables d'un jeu de résultats d'un sql

J'utilise MS SQL Server 2012.

J'ai la requête suivante

Select HedgeDate, CompanyName, HedgeValue FROM GasHedges LEFT OUTER JOIN GasCompanies ON GasHedges.CompanyID = GasCompanies.ID WHERE HedgeDate BETWEEN '2014-09-01' AND '2014-09-05' 

qui revient

Table SQL

Je veux l'afficher dans le format suivant.

résultat requis

J'ai travaillé là-dessus toute la matinée et je n'y suis pas vraiment arrivé. Je ne veux pas spécifier companyName dans le code SQL car plus d'entresockets pourraient être ajoutées à la table. J'ai essayé différentes variantes de jointures mais n'obtenant nulle part. Je regardais aussi des syndicats mais ne peux pas sembler l'get.

Toute aide grandement appréciée.

 SELECT HedgeDate, CompanyName, HedgeValue FROM GasHedges LEFT OUTER JOIN GasCompanies ON GasHedges.CompanyID = GasCompanies.ID PIVOT (count(HedgeValue) FOR CompanyName in ([RWET], [JPMorgan], [Statoil])) WHERE HedgeDate BETWEEN '2014-09-01' AND '2014-09-05' 

Voici

Modifier 1,

si vous voulez que la list soit dynamic, référez-vous ICI Essayez le faire vous-même pour vous assurer de le comprendre

merci ah_hau, avec vos conseils, je suis arrivé au code suivant qui fonctionne

 DECLARE @StartDate date DECLARE @EndDate date DECLARE @cols nvarchar(2000) DECLARE @query nvarchar(3000) select @cols = coalesce(@cols + ',[' + companyName + ']', '[' + companyName + ']') from GasCompanies set @query = 'select * from (Select HedgeDate, CompanyName, HedgeValue FROM GasHedges LEFT OUTER JOIN GasCompanies ON GasHedges.CompanyID = GasCompanies.ID WHERE HedgeDate BETWEEN DATEADD(month, DATEDIFF(month, 0, GETDATE()), 0) AND dateadd(month,1+datediff(month,0,getdate()),-1)) as s PIVOT ( count(HedgeValue) FOR CompanyName in ( '+@cols +' ) ) as t' execute(@query)