Tableau croisé dynamic SQL Server avec plusieurs colonnes avec des dates

J'ai une situation PIVOT.

Colonnes de la table source:

Title Description Datetime RecordsCount A California 2015-07-08 10:44:39.040 5 A California 2015-07-08 12:44:39.040 6 A California 2015-05-08 15:44:39.040 3 B Florida 2015-07-08 16:44:39.040 2 B Florida 2015-05-08 19:44:39.040 4 

Maintenant, j'ai besoin de ce pivoté comme

  2015-07-08 2015-05-08 Title Description A California 11 3 B Florida 2 4 

si nous avons deux décounts d'loggings aux mêmes dates (peu importe le time), puis les additionner, sinon afficher dans une colonne différente.

Essayer d'écrire quelque chose comme ça, mais ça jette des erreurs.

Select * from #DataQualTest PIVOT (SUM(RecordCount) FOR DateTime IN (Select Datetime from #DataQualTest) ) AS Pivot_Table

S'il vous plaît aidez-moi avec cela.

Merci

Pas exactement le mot pour la solution de mot, mais cela devrait vous donner une direction.

 create table #tmp ( country varchar(max) , date1 datetime , record int ) insert into #tmp values ('California', '2010-01-01', 2) insert into #tmp values ('California', '2010-01-01', 5) insert into #tmp values ('California', '2012-01-01', 1) insert into #tmp values ('Florida', '2010-01-01', 3) insert into #tmp values ('Florida', '2010-01-01', 5) select * from #tmp pivot (sum(record) for date1 in ([2010-01-01], [2012-01-01])) as avg 

sortie

 country 2010-01-01 2012-01-01 California 7 1 Florida 8 NULL 

Si vous voulez être plus flexible, vous avez besoin d'un pré-traitement pour passer des horodatages complets aux jours (pour que plus tard le groupement de PIVOT ait effectivement l'effet escompté):

 CREATE VIEW DataQualTestView AS SELECT title , description , DATEFROMPARTS (DATEPART(yyyy, date_time), DATEPART(mm, date_time), DATEPART(dd, date_time)) AS day_from_date_time , recordsCount FROM DataQualTest ; 

De là, vous pouvez continuer:

 DECLARE @query AS NVARCHAR(MAX) DECLARE @columns AS NVARCHAR(MAX) SELECT @columns = ISNULL(@columns + ',' , '') + QUOTENAME(day_from_date_time) FROM (SELECT DISTINCT day_from_date_time FROM DataQualTestView) AS TheDays SET @query = N'SELECT title , description , ' + @columns + ' FROM DataQualTestView PIVOT(SUM(recordsCount) FOR day_from_date_time IN (' + @columns + ')) AS Pivoted' EXEC SP_EXECUTESQL @query GO 

… et obtiendrait:

 | title | description | 2015-05-08 | 2015-07-08 | |-------|-------------|------------|------------| | A | California | 3 | 11 | | B | Florida | 4 | 2 | 

Voir en action: SQL Fiddle .

S'il vous plaît commenter, si et comme cela nécessite un ajustement / plus de détails.