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
Je veux l'afficher dans le format suivant.
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)