[SQL] PIVOT 0 출력 (NULL) 값을 대체하는 방법
SQLPIVOT 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.
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.당신이 당신의 피벗 문에서 동적 열을 사용하는 상황이있는 경우는 다음을 사용할 수 있습니다 :
당신이 당신의 피벗 문에서 동적 열을 사용하는 상황이있는 경우는 다음을 사용할 수 있습니다 :
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.당신은 당신이 선택의 최종 값 주위에 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.때로는 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.당신은 피벗 집합의 모든 값에 대한 계정에 있습니다. 당신은 카티 제품을 사용하여이 작업을 수행 할 수 있습니다.
당신은 피벗 집합의 모든 값에 대한 계정에 있습니다. 당신은 카티 제품을 사용하여이 작업을 수행 할 수 있습니다.
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.피벗에서 결과를 수정하려면 선택한 필드에 열을 넣고 적절하게 수정할 수 있습니다. 당신은 피벗 기능을 사용하여 구축 한 열에 대한 DECODE를 사용 할 수 있습니다.
피벗에서 결과를 수정하려면 선택한 필드에 열을 넣고 적절하게 수정할 수 있습니다. 당신은 피벗 기능을 사용하여 구축 한 열에 대한 DECODE를 사용 할 수 있습니다.
from https://stackoverflow.com/questions/12322342/how-to-replace-null-values-with-0-output-in-pivot by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] PostgreSQL의 행으로 변환 열? 바꾸어 놓다? (0) | 2020.05.02 |
---|---|
[SQL] 데이터베이스 EAV의 장점 / 단점 및 대안 (0) | 2020.05.02 |
[SQL] 파일에 대한 확인은 SQL 서버에 존재 여부? (0) | 2020.05.02 |
[SQL] MySQL은 INSERT INTO ... VALUES과 SELECT (0) | 2020.05.02 |
[SQL] SQL 오류 : ORA-01861 : 리터럴 형식 문자열 01861과 일치하지 않습니다 (0) | 2020.05.02 |