Berurusan dengan Nilai NULL dalam Pertanyaan SQL Server: Menggantikan dengan 0
Apabila bekerja dengan pangkalan data SQL Server, menemui nilai NULL dalam hasil pertanyaan boleh menghalang analisis data. Sebagai contoh, pertimbangkan pertanyaan berikut:
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
Pertanyaan ini mendapatkan semula data daripada dua jadual (sysjobs dan sysjobhistory) dan melakukan pengiraan berdasarkan lajur runstatus. Walau bagaimanapun, jika runstatus mempunyai nilai NULL, pertanyaan mungkin mengembalikan hasil yang tidak dijangka.
Menggantikan NULL dengan 0
Untuk menggantikan nilai NULL dengan 0 dalam SQL Server, gunakan isnull () fungsi. Fungsi ini mengembalikan nilai yang ditentukan jika nilai input adalah NULL; jika tidak, ia mengembalikan nilai input.
isnull(myColumn, 0)
Dalam pertanyaan yang diberikan, c.runstatus mungkin mempunyai nilai NULL. Untuk menggantikan nilai ini dengan 0, ubah suai pertanyaan seperti berikut:
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
Dengan menggunakan isnull(), nilai NULL dalam c.runstatus digantikan dengan 0 sebelum melakukan pengiraan. Ini memastikan bahawa pertanyaan mengembalikan hasil yang tepat walaupun terdapat data yang hilang.
Atas ialah kandungan terperinci Bagaimana Mengendalikan Nilai NULL dalam Pertanyaan SQL Server dan Menggantikannya dengan 0?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!