2016-10-27 4 views
0

Ich habe eine Basistabelle. Base table Ich möchte in lineare Form bringen, deshalb verwende ich Pivot, um es zu haben. Und meine Frage lautet:SQL Server Drop NULL in Pivot

select 
[report_date] AS 'Date' 
,[30],[percent_30] AS '%30' 
,[45],[percent_45] AS '%45' 
,[60],[percent_60] AS '%60' 
,[75],[percent_75] AS '%75' 
,[90],[percent_90] AS '%90' 
,[105],[percent_105] AS '%105' 
,[120],[percent_120] AS '%120' 
,[TOTAL] AS 'Total Sales' 
--,[total_percentage] AS 'Total Percent' 
from database.dbo.delivery_report_logs 
PIVOT(SUM(Sale_Count) 
     FOR description IN ([30],[45],[60],[75],[90],[105],[120],[TOTAL])) AS pvz 

Aber das Ergebnis sieht so aus.

Ich möchte alle Nullen entfernen. Irgendeine Hilfe? Vielen Dank.

Hier ist meine erwartete Ausgabe: Sample Output

+0

Klären Sie bitte, was Sie mit "Alle Nullen entfernen" meinen. –

+0

Ich weiß nicht, warum Sie Pivot verwenden, aber Sie können 'GROUP BY report_date' und verwenden' MIN/MAX' – NEER

+0

Ich möchte alle Nullen fallen lassen und alle Spalten mit Werten anzeigen. Für das Datum 20161024 sollte es in einer Zeile sein, alle Daten sind mit diesem Datum verknüpft. – Darwin

Antwort

0
select 
[report_date] AS 'Date' 
,[30],[percent_30] AS '%30' 
,[45],[percent_45] AS '%45' 
,[60],[percent_60] AS '%60' 
,[75],[percent_75] AS '%75' 
,[90],[percent_90] AS '%90' 
,[105],[percent_105] AS '%105' 
,[120],[percent_120] AS '%120' 
,[TOTAL] AS 'Total Sales' 
--,[total_percentage] AS 'Total Percent' 
from database.dbo.delivery_report_logs 
PIVOT ISNULL(SUM(Sale_Count),0) 
     FOR description IN ([30],[45],[60],[75],[90],[105],[120],[TOTAL])) AS pvz 
+0

Hallo, es hat einen Fehler. Nachricht 102, Ebene 15, Status 1, Zeile 115 Falsche Syntax in der Nähe von "ISNULL". – Darwin

0

Dies ist gelöst. Ich verwende temporäre Tabelle, um die Daten zu schwenken und sie in eine Protokolltabelle einzufügen, und sie gibt mir das Ergebnis, das ich brauche.

0

Sie auch eine Abfrage wie diese verwenden können, die mit einem Fall Ausdruck verwendet und Aggregat

SELECT report_date, 

     SUM(CASE WHEN Description = '30' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = '30' THEN percent_30 END) AS [percent_30], 

     SUM(CASE WHEN Description = '45' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = '45' THEN percent_45 END) AS [percent_45], 

     SUM(CASE WHEN Description = '60' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = '60' THEN percent_60 END) AS [percent_60], 

     SUM(CASE WHEN Description = '75' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = '75' THEN percent_70 END) AS [percent_70], 

     SUM(CASE WHEN Description = '90' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = '90' THEN percent_90 END) AS [percent_90], 

     SUM(CASE WHEN Description = '105' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = '105' THEN percent_105 END) AS [percent_105], 

     SUM(CASE WHEN Description = '120' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = '120' THEN percent_120 END) AS [percent_120], 

     SUM(CASE WHEN Description = 'TOTAL' THEN sale_count END) AS [30], 
     SUM(CASE WHEN Description = 'TOTAL' THEN total_percentage END) AS [total_percentage] 

FROM database.dbo.delivery_report_logs 

GROUP BY report_date 

Sie können auch MAX oder MIN anstelle von SUM verwenden, wenn es nur einen Wert pro ist REPORT_DATE/percentate