218

クエリを作成したところ、最初の 3 つの列の結果に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
4

13 に答える 13

455

null可能性のある列を別のものに置き換えたい場合は、 IsNullを使用します。

SELECT ISNULL(myColumn, 0 ) FROM myTable

最初に null の場合、これにより myColumn に 0 が設定されます。

于 2013-05-30T15:49:21.860 に答える
26

coalesce:

coalesce(column_name,0)

ただし、 where summingは、次のようにwhen condition then 1簡単に変更できます。sumcount

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

( Count(null)0 をsum(null)返しますが、null を返します。)

于 2013-05-30T15:49:03.080 に答える
13

最初の 3 つの列と言うとき、それはあなたのSUM列のことですか? ELSE 0もしそうなら、あなたのCASE声明に追加してください。値のSUMはです。NULLNULL

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, 
于 2013-05-30T15:49:44.947 に答える
8

Presto、AWS Athena などを使用している場合、ISNULL() 関数はありません。代わりに、次を使用します。

SELECT COALESCE(myColumn, 0 ) FROM myTable
于 2019-10-29T14:27:45.010 に答える
0

以前の回答に従って、SQLサーバーdbで列名を失っていましたが、この構文に従うことでColumnNameも保持できました

ISNULL(MyColumnName, 0) MyColumnName
于 2019-04-06T13:22:42.447 に答える