首頁 > 資料庫 > mysql教程 > 如何處理 SQL Server 查詢中的 NULL 值並將其替換為 0?

如何處理 SQL Server 查詢中的 NULL 值並將其替換為 0?

Mary-Kate Olsen
發布: 2025-01-01 06:10:10
原創
246 人瀏覽過

How to Handle NULL Values in SQL Server Queries and Replace Them with 0?

處理SQL Server 查詢中的NULL 值:用0 取代

使用SQL Server 資料庫時,在查詢結果中遇到NULL 值可能會導致以下情況:阻礙數據分析。例如,考慮以下查詢:

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(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
登入後複製

此查詢從兩個表(sysjobs 和 sysjobhistory)檢索數據,並根據 runstatus 列執行計算。但是,如果 runstatus 具有 NULL 值,查詢可能會傳回意外結果。

將 NULL 替換為 0

要在 SQL Server 中將 NULL 值替換為 0,請使用 isnull () 功能。如果輸入值為NULL,則函數傳回指定值;否則,它會傳回輸入值。

isnull(myColumn, 0)
登入後複製

在給定的查詢中,c.runstatus 可能具有 NULL 值。若要將這些值替換為 0,請修改查詢如下:

Select c.rundate,
    sum(case when isnull(c.runstatus, 0) = 'Succeeded' then 1 end) as Succeeded,
    sum(case when isnull(c.runstatus, 0) = 'Failed' then 1 end) as Failed,
    sum(case when isnull(c.runstatus, 0) = '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(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
登入後複製

透過使用 isnull(),在執行計算之前將 c.runstatus 中的 NULL 值替換為 0。這可以確保即使存在缺失數據,查詢也能傳回準確的結果。

以上是如何處理 SQL Server 查詢中的 NULL 值並將其替換為 0?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板