Données de pivot dans SQL Server

Je dois créer un rapport à l'aide de la procédure stockée SQL Server 2008R2 qui renverra la forme de données suivante: entrez la description de l'image ici

Ma vue dans SQL Server renvoie des données comme celle-ci: entrez la description de l'image ici

L'user sélectionnera start_date et end_date et cette plage de dates sera affichée dans des colonnes, c.-à-d. Si l'user sélectionne Apr 1,2012 à Avr 7, 2012 puis 7 jours, Jour1 à Jour7 sera affiché dans les colonnes. La colonne de gauche affichera les totaux du champ "ApplicationId". Notez que "Affecté", "Traitement", .. sont le champ Statut.

Vérifiez cet exemple .. comme j'ai mis en œuvre en utilisant celui-ci. vous pouvez créer vos colonnes dynamics / pivot dynamic. mais vous devez l'utiliser en execute dans le server sql.

Vous pouvez implémenter / modifier votre requête comme vous le souhaitez.

Réf: Pivots avec des colonnes dynamics dans SQL Server 2005

 DECLARE @query NVARCHAR(4000) SET @query = N'SELECT tID, '+ @cols +' FROM (SELECT t2.tID , t1.ColName , t2.Txt FROM Table1 AS t1 JOIN Table2 AS t2 ON t1.ColId = t2.ColID) p PIVOT ( MAX([Txt]) FOR ColName IN ( '+ @cols +' ) ) AS pvt ORDER BY tID;' Executing this with EXECUTE(@query) 

Pour plus de reference à ce sujet:
SQL Server – Table dynamic PIVOT – Injection SQL
Requête PIVOT dynamic pour le résultat de l'onglet croisé
Pivot dynamic dans SQL Server – il contient un exemple qui correspond quelque peu à vos besoins.

J'espère que cette aide ..

Vous pouvez le faire en utilisant un peu de DATEDIFF et PIVOT. Comme ça…

 select name, max(DAY_1) as DAY_1, max(DAY_2) as DAY_2, max(DAY_3) as DAY_3, max(DAY_4) as DAY_4, max(DAY_5) as DAY_5 from ( SELECT s.value_Date, name, end_datetime, 'DAY_' + cast( DATEDIFF(DAY, dates.value_date, today.value_date) as varchar) as day FROM schema1.VW_SKY_BATCH_STATUS S CROSS JOIN (select top 1 VALUE_DATE from schema2.BUSINESS_DATE where CALENDAR = 'london' order by VALUE_DATE desc) as today JOIN (select top 6 VALUE_DATE from schema2.BUSINESS_DATE where CALENDAR = 'london' order by VALUE_DATE desc) dates on dates.VALUE_DATE = s.VALUE_DATE JOIN Reports.REPORT_DESCRIPTION rd on rd.ID = s.PROFILE_ID) AS SourceTable PIVOT (MAX(end_datetime) FOR day IN (DAY_1, DAY_2, DAY_3, DAY_4, DAY_5)) AS pt GROUP BY name