복붙노트

[SQL] SQL 서버 쿼리에서 0과 NULL 교체

SQL

SQL 서버 쿼리에서 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. ==============================

    1.당신이 다른 뭔가 null의 가능성이 컬럼을 교체 할 때, ISNULL을 사용합니다.

    당신이 다른 뭔가 null의 가능성이 컬럼을 교체 할 때, ISNULL을 사용합니다.

    SELECT ISNULL(myColumn, 0 ) FROM myTable
    

    그것은 처음부터 null의 경우이 myColumn에 공을 넣어 것입니다.

  2. ==============================

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

    3.COALESCE로 :

    COALESCE로 :

    coalesce(column_name,0)
    

    조건을 1, 당신은 그냥 간단하게 합을 변경할 수있을 때 합산하여 계산하는 경우, 비록 - 예를 :

    count(case when c.runstatus = 'Succeeded' then 1 end) as Succeeded,
    

    (COUNT (NULL)을하는 동안 합 (NULL)을 리턴 널 0 리턴).

  4. ==============================

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

    5.간단한 방법은

    간단한 방법은

    UPDATE tbl_name SET fild_name = value WHERE fild_name IS NULL
    
  6. ==============================

    6.이 코드에 열을 감 쌉니다.

    이 코드에 열을 감 쌉니다.

     ISNULL(Yourcolumn, 0)
    

    당신이 널 (null)을 받고 아마 그래서 확인

  7. ==============================

    7.처음하지 않은 널 (null) 값을 예를 들어, 반환 사용 COALESCE,

    처음하지 않은 널 (null) 값을 예를 들어, 반환 사용 COALESCE,

    SELECT COALESCE(sum(case when c.runstatus = 'Succeeded' then 1 end), 0) as Succeeded
    

    이 NULL로 반환되는 경우 0으로 성공 설정합니다.

  8. ==============================

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

    9.당신은 프레스토를 사용하는 경우, AWS 아테나 등, 더 ISNULL () 함수가 없다. 대신, 사용 :

    당신은 프레스토를 사용하는 경우, AWS 아테나 등, 더 ISNULL () 함수가 없다. 대신, 사용 :

    SELECT COALESCE(myColumn, 0 ) FROM myTable
    
  10. ==============================

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

    11.이전 답변에 따라 내가 그러나이 구문 다음 SQL 서버 DB에 내 열 이름을 잃고뿐만 아니라의 ColumnName을 유지하기 위해 나를 도와

    이전 답변에 따라 내가 그러나이 구문 다음 SQL 서버 DB에 내 열 이름을 잃고뿐만 아니라의 ColumnName을 유지하기 위해 나를 도와

    ISNULL(MyColumnName, 0) MyColumnName
    
  12. from https://stackoverflow.com/questions/16840522/replacing-null-with-0-in-a-sql-server-query by cc-by-sa and MIT license