복붙노트

[SQL] PIVOT 0 출력 (NULL) 값을 대체하는 방법

SQL

PIVOT 0 출력 (NULL) 값을 대체하는 방법

나는 PIVOT 기능에 0 (제로) 출력으로 (NULL) 값을 변환하지만 성공이없는 것을 시도했다.

다음은 "테이블이고 구문은 내가 시도했습니다

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

나는 ISNULL을 사용하는 시도했지만 작동하지 않았다.

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

누군가는 구문 오류로보고시겠습니까? 고마워요!

해결법

  1. ==============================

    1.

    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. ==============================

    2.당신이 당신의 피벗 문에서 동적 열을 사용하는 상황이있는 경우는 다음을 사용할 수 있습니다 :

    당신이 당신의 피벗 문에서 동적 열을 사용하는 상황이있는 경우는 다음을 사용할 수 있습니다 :

    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
    ')
    
  3. ==============================

    3.당신은 당신이 선택의 최종 값 주위에 ISNULL ()를 배치 할 수 있도록 데이터 선택 후까지 ISNULL ()을 배치 할 수 없습니다 :

    당신은 당신이 선택의 최종 값 주위에 ISNULL ()를 배치 할 수 있도록 데이터 선택 후까지 ISNULL ()을 배치 할 수 없습니다 :

    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
    
  4. ==============================

    4.때로는 T-SQL 구문 분석기와 같은 파서처럼 생각하는 것이 좋습니다. 명령문을 실행하는 동안, 파서는 피벗 부분에 값이 없으며 해당 섹션에있는 체크 식을 가질 수 없습니다. 그건 그렇고, 당신은 단순히 이것을 사용할 수 있습니다 :

    때로는 T-SQL 구문 분석기와 같은 파서처럼 생각하는 것이 좋습니다. 명령문을 실행하는 동안, 파서는 피벗 부분에 값이 없으며 해당 섹션에있는 체크 식을 가질 수 없습니다. 그건 그렇고, 당신은 단순히 이것을 사용할 수 있습니다 :

    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
    
  5. ==============================

    5.당신은 피벗 집합의 모든 값에 대한 계정에 있습니다. 당신은 카티 제품을 사용하여이 작업을 수행 할 수 있습니다.

    당신은 피벗 집합의 모든 값에 대한 계정에 있습니다. 당신은 카티 제품을 사용하여이 작업을 수행 할 수 있습니다.

    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
    
  6. ==============================

    6.피벗에서 결과를 수정하려면 선택한 필드에 열을 넣고 적절하게 수정할 수 있습니다. 당신은 피벗 기능을 사용하여 구축 한 열에 대한 DECODE를 사용 할 수 있습니다.

    피벗에서 결과를 수정하려면 선택한 필드에 열을 넣고 적절하게 수정할 수 있습니다. 당신은 피벗 기능을 사용하여 구축 한 열에 대한 DECODE를 사용 할 수 있습니다.

  7. from https://stackoverflow.com/questions/12322342/how-to-replace-null-values-with-0-output-in-pivot by cc-by-sa and MIT license