[sql] SQL Server 쿼리에서 NULL을 0으로 대체
쿼리를 개발했으며 처음 세 열의 결과에서을 얻었습니다 NULL
. 그것을 어떻게 대체 할 수 0
있습니까?
Select c.rundate,
sum(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded,
sum(case when c.runstatus = 'Failed' then 1 end) as Failed,
sum(case when c.runstatus = 'Cancelled' then 1 end) as Cancelled,
count(*) as Totalrun from
( Select a.name,case when b.run_status=0 Then 'Failed' when b.run_status=1 Then 'Succeeded'
when b.run_status=2 Then 'Retry' Else 'Cancelled' End as Runstatus,
---cast(run_date as datetime)
cast(substring(convert(varchar(8),run_date),1,4)+'/'+substring(convert(varchar(8),run_date),5,2)+'/' +substring(convert(varchar(8),run_date),7,2) as Datetime) as RunDate
from msdb.dbo.sysjobs as a(nolock) inner join msdb.dbo.sysjobhistory as b(nolock)
on a.job_id=b.job_id
where a.name='AI'
and b.step_id=0) as c
group by
c.rundate
답변
가능한 null
열을 다른 것으로 바꾸려면 IsNull을 사용하십시오 .
SELECT ISNULL(myColumn, 0 ) FROM myTable
처음에는 null이면 myColumn에 0을 넣습니다.
답변
이 두 가지 방법을 모두 사용할 수 있지만 차이점이 있습니다.
SELECT ISNULL(col1, 0 ) FROM table1
SELECT COALESCE(col1, 0 ) FROM table1
COALESCE ()와 ISNULL () 비교 :
-
ISNULL 함수와 COALESCE 표현식의 목적은 비슷하지만 다르게 동작 할 수 있습니다.
-
ISNULL은 함수이므로 한 번만 평가됩니다. 위에서 설명한 것처럼 COALESCE 표현식의 입력 값은 여러 번 평가 될 수 있습니다.
-
결과 표현식의 데이터 유형 결정이 다릅니다. ISNULL은 첫 번째 매개 변수의 데이터 유형을 사용하고 COALESCE는 CASE 표현식 규칙을 따르고 우선 순위가 가장 높은 값의 데이터 유형을 리턴합니다.
-
ISNULL 및 COALESCE에 대한 결과 표현식의 NULL 가능성이 다릅니다. 널 (NULL)이 아닌 매개 변수가있는 COALESCE는 널 (NULL)로 간주되는 반면, ISNULL 리턴 값은 항상 널 (NULL) 입력 가능하지 않은 것으로 간주됩니다 (복귀 값이 널이 아닌 것으로 가정). 따라서 ISNULL (NULL, 1) 및 COALESCE (NULL, 1) 식은 서로 다른 Null 허용 값을 갖습니다. 계산 된 열에서 이러한 표현식을 사용하거나 키 제한 조건을 작성하거나 스칼라 UDF의 리턴 값을 결정하여 다음 예제와 같이 인덱싱 할 수 있으면 차이가 있습니다.
-PRIMARY KEY가 NULL 값을 승인 할 수없고 col2에 대한 COALESCE 표현식의 널 입력 가능 여부가 NULL로 평가되므로이 명령문은 실패합니다.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0) PRIMARY KEY,
col3 AS ISNULL(col1, 0)
);
-ISNULL 함수의 Null 허용 여부는 AS NOT NULL로 평가되므로이 명령문은 성공합니다.
CREATE TABLE #Demo
(
col1 integer NULL,
col2 AS COALESCE(col1, 0),
col3 AS ISNULL(col1, 0) PRIMARY KEY
);
답변
로 coalesce
:
coalesce(column_name,0)
합산 곳,하지만 when condition then 1
, 당신은 쉽게 바꿀 수 sum
에 count
– 예 :
count(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded,
( Count(null)
0을 sum(null)
반환하고 null 을 반환합니다.)
답변
처음 세 열을 말할 때 열을 의미 SUM
합니까? 그렇다면, ELSE 0
당신의 CASE
진술에 추가 하십시오 . SUM
(A)의 NULL
값이다 NULL
.
sum(case when c.runstatus = 'Succeeded' then 1 else 0 end) as Succeeded,
sum(case when c.runstatus = 'Failed' then 1 else 0 end) as Failed,
sum(case when c.runstatus = 'Cancelled' then 1 else 0 end) as Cancelled,
답변
간단한 방법은
UPDATE tbl_name SET fild_name = value WHERE fild_name IS NULL
답변
이 코드로 열을 감싸십시오.
ISNULL(Yourcolumn, 0)
어쩌면 왜 null을 받고 있는지 확인하십시오.
답변
COALESCE
첫 번째 null이 아닌 값을 반환하는 Use
SELECT COALESCE(sum(case when c.runstatus = 'Succeeded' then 1 end), 0) as Succeeded
로 반환되면 성공을 0으로 설정 NULL
합니다.