2016-07-29 27 views
1

Ich habe folgende TSQL, die ich habe versucht, ohne Glück, 2 Dinge zu tun mit:Erstellen Tabelle mit dynamischen Spalten mit der PIVOT Befehl

  1. Nulls konvertieren auf 0
  2. Ausgabe in eine temporäre Tabelle Ich kann für andere Operationen verwenden. enter image description here

    Welche Änderungen muss ich sowohl das Ergebnis in eine temporäre Tabelle mit dynamischen Spalten machen zu erfassen, und die NULL-Werte zu beseitigen:

Teil des Ergebnisses wird in der beigefügten erfasst? Danke.

DECLARE @cols NVARCHAR(MAX), @stmt NVARCHAR(MAX), @ParmDefinition NVARCHAR(MAX), @PVT3 NVARCHAR(MAX); 

--Get distinct values of the PIVOT Column 
SELECT @cols = ISNULL(@cols+', ', '')+'['+T.Cat+']' 
FROM 
(
    SELECT TOP 100 CONVERT(VARCHAR(2), IncomeCategoryID) AS Cat 
    FROM Payroll.lu_IncomeCategory 
    WHERE IsAllowance <> 0 
      AND IncomeCategoryID IN 
    (
     SELECT DISTINCT 
       IncomeCategoryID 
     FROM Payroll.Income 
     WHERE IncomeCategoryID <> 0 
    ) 
    ORDER BY IncomeCategoryID 
) AS T; 

SELECT @stmt = N' 
    SELECT * 
    FROM (SELECT EmployeeID,IncomeCategoryID, 
    SUM(RateAmount) [Amount] 
FROM Payroll.Income 
GROUP BY EmployeeID, IncomeCategoryID) as PayData 
     pivot 
     (
      SUM([Amount]) 
      FOR IncomeCategoryID IN ('[email protected]+') 
     ) as IncomePivot'; 
EXEC sp_executesql 
    @stmt = @stmt; 

Antwort

0

Fertig.
Für die erste Herausforderung funktionierte es nach der Verwendung des @NullToZeroCols-Beispiels in einem der vorherigen Beiträge in diesem Forum. Für meine zweite Herausforderung wählte ich schließlich in eine nicht temporäre Tabelle aus, die ich jedes Mal suchen und ablegen kann, wenn ich meinen TSQL-Befehl ausführe. Ich habe gelernt, dass der Umfang der zuvor erstellten temporären Tabelle es mir nicht erlauben würde, sie nach der Ausführung des PIVOT-Befehls zu verwenden.