2016-07-29 2 views
1

je l'TSQL suivante que j'ai essayé, sans succès, de faire 2 choses avec:Création table avec des colonnes dynamiques à l'aide de la commande PIVOT

  1. convertir les valeurs NULL à 0
  2. sortie à une table temporaire Je peux utiliser pour d'autres opérations.

Une partie du résultat est capturé dans le joint: enter image description here

Quels changements dois-je faire à la fois saisir le résultat dans une table temporaire avec des colonnes dynamiques, et d'éliminer les valeurs nulles? Merci.

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; 

Répondre

0

Terminé.
Pour le premier défi, cela a fonctionné après avoir utilisé l'exemple @NullToZeroCols dans l'un des messages précédents sur ce forum. Pour mon deuxième défi, j'ai finalement sélectionné une table non-temporaire que je peux rechercher et abandonner chaque fois que j'exécute ma commande TSQL. J'ai appris que la portée de la table temporaire précédemment créée ne me permettait pas de l'utiliser après l'exécution de la commande PIVOT.