2016-07-12 2 views
1

Ich habe zwei Tabellen MasterTableTest8 und HistoricDatatest8.Wie erstellt Bericht mit PIVOT basierend auf Datum

create table MasterTableTest8 
(ID int primary key, Name varchar(10)) 

insert into MasterTableTest8 values (1,'ATS') 
insert into MasterTableTest8 values (2,'BTS') 
CREATE TABLE HistoricDatatest8 
(
ID int FOREIGN KEY REFERENCES MasterTableTest8(ID), 
Name varchar(100), 
ShortName varchar(10), 
Reason varchar(10), 
Importance varchar(10), 
Noofissues int, 
inserteddate datetime 
) 
insert into HistoricDatatest8 values (1,'ATS','S', 'Other','High',26,getdate()-7) 
insert into HistoricDatatest8 values (1,'ATS','S', 'Other','High',8,getdate()+7) 
insert into HistoricDatatest8 values (1,'ATS','S', 'Other','High',80,getdate()) 

insert into HistoricDatatest8 values (2,'BTS','S1', 'Other','LOW',26,getdate()-7) 
insert into HistoricDatatest8 values (2,'BTS','S1', 'Other','LOW',8,getdate()+7) 
insert into HistoricDatatest8 values (2,'BTS','S1', 'Other','LOW',80,getdate()) 

--Created und eingefügt zwei Tabellen.

select 
N.ID, 
N.Name, 
ShortName, 
Reason, 
Importance, 
Noofissues, 
inserteddate 
INTO #TABLE 
FROM HistoricDatatest8 N 
JOIN MasterTableTest S ON N.ID=S.ID 

--Inserting die erforderlichen Daten in der Hash-Tabelle.

--drop table #table 

    DECLARE @cols NVARCHAR (MAX) 
SELECT @cols = COALESCE (@cols + ',[' + CONVERT(NVARCHAR, [inserteddate], 106) + ']', 
      '[' + CONVERT(NVARCHAR, [inserteddate], 106) + ']') 
      FROM (SELECT DISTINCT [inserteddate] FROM #TABLE) PV 
      ORDER BY [inserteddate] 

      DECLARE @query NVARCHAR(MAX) 
SET @query = '   
      SELECT * FROM 
     ( 
      SELECT * FROM #TABLE 
     ) x 
     PIVOT 
     (
      count(Noofissues) 
      FOR [inserteddate] IN (' + @cols + ') 
     ) p' 
     EXEC SP_EXECUTESQL @query 

Aktuell Ergebnis

current results image

Erwartetes Ergebnis:

expected results image

+0

Sie haben verschiedene Fehler in Ihrer SQL-Syntax. Bitte korrigieren Sie sie. Fügen Sie außerdem das tatsächliche und das erwartete Ergebnis zur Frage hinzu. –

+0

@Chris Pickford, nur die Änderungen vorgenommen und scheint Probleme mit Datum verwandt ist, könnten Sie bitte auf diese bitte. –

Antwort

0

Nach vielen R & D habe ich dieses Ergebnis erhalten, könnte nützlich sein für einige andere. wenn eine optimierte Antwort geschätzt wird.

select * from HistoricDatatest80 Sortieren nach ID wählen N.ID, N.Name, Short, Reason, Wichtigkeit Noofissues, inserteddate INTO #table FROM HistoricDatatest80 N JOIN MasterTableTest80 S ON N.ID = S.ID

--drop table #table 

    DECLARE @cols NVARCHAR (MAX) 
SELECT @cols = COALESCE (@cols +',','')+ '['+DATEValue+']' 
      FROM (SELECT DISTINCT (CONVERT(NVARCHAR, [inserteddate], 106)) AS DATEValue FROM HistoricDatatest80) PV 
      ORDER BY DATEValue 
      print @cols 
      DECLARE @query NVARCHAR(MAX) 
SET @query = '   
      SELECT * FROM 
     ( 
      SELECT ShortName,Reason,Importance,Noofissues,(CONVERT(NVARCHAR, [inserteddate], 106)) AS DATEValue FROM #TABLE 
     ) x 
     PIVOT 
     (
      sum(Noofissues) 
      FOR [DATEValue] IN (' + @cols + ') 

     ) p'  
     EXEC SP_EXECUTESQL @query 


    drop table #table 
0

Was ist Ihr erwartete Ergebnis? Ihre aktuelle Anzeige zeigt das gleiche aktuelle und erwartete Ergebnis.

Erwarten Sie: Datum | Name | Kurzname | Grund | Wichtigkeit | Anzahl der Probleme | 05-Jul-16 | ATS | S | Andere | Hoch | 26 12-Jul-16 | BTS | S1 | Andere | LOW | 80

+0

Derzeit alle 5. Juli, 12. Juli und 19. Juli zeigen als Null (0) –

+0

und wenn ich eine weitere Zeile in der Tabelle für das gleiche Datum hinzufügen bekomme ich Kompilierung Fehler (Die Spalte '12 Jul 2016 'wurde mehrfach angegeben für 'p'.) Einfügen in HistoricDatatest8 Werte (1, 'ATS', 'S', 'Andere', 'Meduim', 80, getdate()) –

Verwandte Themen