it-swarm.com.de

Ersetzen von (Null-) Werten durch Ausgabe in PIVOT

Ich habe versucht, die (Null) -Werte mit der 0 (Null) -Ausgabe in der PIVOT-Funktion zu konvertieren, habe aber keinen Erfolg.

Unten ist die Tabelle und die Syntax, die ich versucht habe "

SELECT
CLASS,
[AZ],
[CA],
[TX]
FROM #TEMP
PIVOT (SUM(DATA)
FOR STATE IN ([AZ], [CA], [TX])) AS PVT
ORDER BY CLASS

CLASS   AZ  CA      TX
RICE    10  4       (null)
COIN    30  3        2
VEGIE   (null) (null) 9

Ich habe versucht, die ISNULL zu verwenden, funktionierte aber nicht.

PIVOT SUM(ISNULL(DATA,0)) AS QTY

Könnte jemand bitte seinen Syntaxfehler untersuchen? Danke vielmals!

33
joe
SELECT CLASS,
isnull([AZ],0),
isnull([CA],0),
isnull([TX],0)
FROM #TEMP
PIVOT (SUM(DATA)
FOR STATE IN ([AZ], [CA], [TX])) AS PVT
ORDER BY CLASS
33
Sankara

Wenn Sie in einer Situation sind, in der Sie dynamische Spalten in Ihrer Pivot-Anweisung verwenden, können Sie Folgendes verwenden:

DECLARE @cols               NVARCHAR(MAX)
DECLARE @colsWithNoNulls    NVARCHAR(MAX)
DECLARE @query              NVARCHAR(MAX)

SET @cols = STUFF((SELECT distinct ',' + QUOTENAME(Name) 
            FROM Hospital
            WHERE Active = 1 AND StateId IS NOT NULL
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

SET @colsWithNoNulls = STUFF(
            (
                SELECT distinct ',ISNULL(' + QUOTENAME(Name) + ', ''No'') ' + QUOTENAME(Name)
                FROM Hospital
                WHERE Active = 1 AND StateId IS NOT NULL
                FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,1,'')

EXEC ('
        SELECT Clinician, ' + @colsWithNoNulls + '
        FROM
        (
            SELECT DISTINCT p.FullName AS Clinician, h.Name, CASE WHEN phl.personhospitalloginid IS NOT NULL THEN ''Yes'' ELSE ''No'' END AS HasLogin
            FROM Person p
            INNER JOIN personlicense pl ON pl.personid = p.personid
            INNER JOIN LicenseType lt on lt.licensetypeid = pl.licensetypeid
            INNER JOIN licensetypegroup ltg ON ltg.licensetypegroupid = lt.licensetypegroupid
            INNER JOIN Hospital h ON h.StateId = pl.StateId
            LEFT JOIN PersonHospitalLogin phl ON phl.personid = p.personid AND phl.HospitalId = h.hospitalid
            WHERE ltg.Name = ''RN'' AND
                pl.licenseactivestatusid = 2 AND
                h.Active = 1 AND
                h.StateId IS NOT NULL
        ) AS Results
        PIVOT
        (
            MAX(HasLogin)
            FOR Name IN (' + @cols + ')
        ) p
')
15
spinon

Sie können die IsNull() erst nach der Auswahl der Daten platzieren, sodass Sie die IsNull() um den Endwert in der SELECT platzieren:

SELECT CLASS,
  IsNull([AZ], 0) as [AZ],
  IsNull([CA], 0) as [CA],
  IsNull([TX], 0) as [TX]
FROM #TEMP
PIVOT 
(
  SUM(DATA)
  FOR STATE IN ([AZ], [CA], [TX])
) AS PVT
ORDER BY CLASS
11
Taryn

Manchmal ist es besser, als Parser wie T-SQL-Parser zu denken. Während der Ausführung der Anweisung hat Parser keinen Wert im Pivot-Abschnitt, und in diesem Abschnitt können keine Prüfausdrücke enthalten sein. Sie können dies übrigens einfach verwenden:

SELECT  CLASS
,   IsNull([AZ], 0)
,   IsNull([CA], 0)
,   IsNull([TX], 0)
    FROM #TEMP
    PIVOT (
        SUM(DATA)
        FOR STATE IN (
            [AZ]
        ,   [CA]
        ,   [TX]
        )
    )   AS  PVT
    ORDER   BY  CLASS
2
Rikki

Sie müssen alle Werte im Pivot-Set berücksichtigen. Sie können dies mit einem kartesischen Produkt erreichen.

select pivoted.*
from (
    select cartesian.key1, cartesian.key2, isnull(relationship.[value],'nullvalue') as [value]
    from (
      select k1.key1, k2.key2
      from ( select distinct key1 from relationship) k1
          ,( select distinct key2 from relationship) k2
    ) cartesian
      left outer join relationship on relationship.key1 = cartesian.key1 and  relationship.key2 = carterisan.key2
) data
  pivot (
    max(data.value) for ([key2_v1], [key2_v2], [key2_v3], ...)
  ) pivoted
1
maero

Um die Ergebnisse unter "Pivot" zu ändern, können Sie die Spalten in die ausgewählten Felder einfügen und sie entsprechend ändern. Möglicherweise können Sie DECODE für die Spalten verwenden, die Sie mit der Pivot-Funktion erstellt haben. 

  • Kranti A
0
Kranti Kumar