Dynamiquement les noms de colonnes de select sql

J'ai datatables suivantes dans ma database

Observation 1 aug -2015 Improvement suggestion 1 dec -2015 Observation 1 dec -2015 Accident 2 jan -2016 Non Conformity 5 jan -2016 Observation 5 jan -2016 

J'ai essayé de comprendre comment utiliser PIVOT-table pour faire ce travail, mais ne peut pas le faire fonctionner. La date est dynamic en fonction d'une date dans la database. La sortie que je cherche est comme ci-dessous. Quelqu'un peut-il me diriger dans la bonne direction?

Regardez le violon que j'ai essayé jusqu'ici, je sais qu'il utilise SUM en ce moment, et ce n'est pas correct, mais je ne sais pas quoi utiliser. http://sqlfiddle.com/#!3/0bd0c/4

Sortie nécessaire

PS. Les données et l'image ne sont pas liées, alors ne vous laissez pas berner par l'image. C'est juste un exemple

Est ce que c'est ce que vous recherchiez:

 DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @cols = STUFF((SELECT DISTINCT ',' + QUOTENAME(ColumnName) from tempData group by ColumnName, name FOR XML PATH(''), Type ).value('.', 'NVARCHAR(MAX)') ,1,1,'') set @query = N'SELECT Name, ' + @cols + N' from ( select Name, value, ColumnName from tempData ) x pivot ( SUM(value) for ColumnName in (' + @cols + N') ) p ' exec sp_executesql @query; 

Changer ceci dans votre violon renvoie les rangées selon vos besoins.

Essayez-le comme ceci:

 DECLARE @cols AS NVARCHAR(MAX)= STUFF( ( SELECT DISTINCT ',[' + ColumnName + ']' FROM tempData FOR XML PATH('') ) ,1,1,''); DECLARE @SqlCmd VARCHAR(MAX)= 'SELECT p.* FROM ( SELECT * FROM tempData ) AS tbl PIVOT ( SUM(Value) FOR ColumnName IN(' + @cols +') ) AS p'; EXEC(@SqlCmd);