[SQL] SQL 서버 쿼리에서 0과 NULL 교체
SQLSQL 서버 쿼리에서 0과 NULL 교체
나는 쿼리를 개발, 나는 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
해결법
-
==============================
1.당신이 다른 뭔가 null의 가능성이 컬럼을 교체 할 때, ISNULL을 사용합니다.
당신이 다른 뭔가 null의 가능성이 컬럼을 교체 할 때, ISNULL을 사용합니다.
SELECT ISNULL(myColumn, 0 ) FROM myTable
그것은 처음부터 null의 경우이 myColumn에 공을 넣어 것입니다.
-
==============================
2.이러한 방법을 모두 사용할 수 있지만 차이가있다 :
이러한 방법을 모두 사용할 수 있지만 차이가있다 :
SELECT ISNULL(col1, 0 ) FROM table1 SELECT COALESCE(col1, 0 ) FROM table1
COALESCE ()와 ISNULL ()를 비교 :
- 기본 키가 NULL 값을 허용 할 수 없기 때문에이 문은 실패 - 및 COL2에 대한 COALESCE 식의 Null 허용 - NULL로 평가됩니다.
CREATE TABLE #Demo ( col1 integer NULL, col2 AS COALESCE(col1, 0) PRIMARY KEY, col3 AS ISNULL(col1, 0) );
-이 문장은 성공 때문에의 Null 허용 - ISNULL 함수는 AS NOT NULL은 평가한다.
CREATE TABLE #Demo ( col1 integer NULL, col2 AS COALESCE(col1, 0), col3 AS ISNULL(col1, 0) PRIMARY KEY );
-
==============================
3.COALESCE로 :
COALESCE로 :
coalesce(column_name,0)
조건을 1, 당신은 그냥 간단하게 합을 변경할 수있을 때 합산하여 계산하는 경우, 비록 - 예를 :
count(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded,
(COUNT (NULL)을하는 동안 합 (NULL)을 리턴 널 0 리턴).
-
==============================
4.당신은 당신의 SUM 열을 의미하는 첫 번째 세 개의 열이 말할 때, 무엇입니까? 그렇다면, 당신의 CASE 문에 ELSE 0을 추가합니다. NULL 값의 합은 NULL입니다.
당신은 당신의 SUM 열을 의미하는 첫 번째 세 개의 열이 말할 때, 무엇입니까? 그렇다면, 당신의 CASE 문에 ELSE 0을 추가합니다. 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,
-
==============================
5.간단한 방법은
간단한 방법은
UPDATE tbl_name SET fild_name = value WHERE fild_name IS NULL
-
==============================
6.이 코드에 열을 감 쌉니다.
이 코드에 열을 감 쌉니다.
ISNULL(Yourcolumn, 0)
당신이 널 (null)을 받고 아마 그래서 확인
-
==============================
7.처음하지 않은 널 (null) 값을 예를 들어, 반환 사용 COALESCE,
처음하지 않은 널 (null) 값을 예를 들어, 반환 사용 COALESCE,
SELECT COALESCE(sum(case when c.runstatus = 'Succeeded' then 1 end), 0) as Succeeded
이 NULL로 반환되는 경우 0으로 성공 설정합니다.
-
==============================
8.테스트 조건이 발견되지 않는 경우가 제로로 기본 있도록 case 문에 다른 사람을 추가합니다. 순간 시험 조건이 발견되지 않는 경우 NULL은 SUM () 함수에 전달되고있다.
테스트 조건이 발견되지 않는 경우가 제로로 기본 있도록 case 문에 다른 사람을 추가합니다. 순간 시험 조건이 발견되지 않는 경우 NULL은 SUM () 함수에 전달되고있다.
Select c.rundate, 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, 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
-
==============================
9.당신은 프레스토를 사용하는 경우, AWS 아테나 등, 더 ISNULL () 함수가 없다. 대신, 사용 :
당신은 프레스토를 사용하는 경우, AWS 아테나 등, 더 ISNULL () 함수가 없다. 대신, 사용 :
SELECT COALESCE(myColumn, 0 ) FROM myTable
-
==============================
10.
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,
여기에서 문제는 실행 상태가 열 설명에 명시된 상태가 아닌 경우 else 문없이, 당신은 널을받을 수밖에이다. 널에 무엇을 추가하면 널 결과, 그리고이 쿼리의 문제입니다 것입니다.
행운을 빕니다!
-
==============================
11.이전 답변에 따라 내가 그러나이 구문 다음 SQL 서버 DB에 내 열 이름을 잃고뿐만 아니라의 ColumnName을 유지하기 위해 나를 도와
이전 답변에 따라 내가 그러나이 구문 다음 SQL 서버 DB에 내 열 이름을 잃고뿐만 아니라의 ColumnName을 유지하기 위해 나를 도와
ISNULL(MyColumnName, 0) MyColumnName
from https://stackoverflow.com/questions/16840522/replacing-null-with-0-in-a-sql-server-query by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 이유는 카운트 (*) "열"의 별칭을 사용하고 HAVING 절에서 참조 할 수 없습니다? (0) | 2020.04.23 |
---|---|
[SQL] 구문에 대한 루프 SQL Server의 (0) | 2020.04.23 |
[SQL] MySQL의에서 SET 자동 커밋 = 1 START의 TRANSACTION의 차이는 (유무 내가 뭔가를 놓친?) (0) | 2020.04.23 |
[SQL] SQL Server의 문자열에서 모든 공백을 제거 (0) | 2020.04.23 |
[SQL] 어떻게 MySQL의에서 선택에서 삭제? (0) | 2020.04.23 |