Umgang mit NULL-Werten in SQL Server-Abfragen: Ersetzen durch 0
Bei der Arbeit mit SQL Server-Datenbanken können NULL-Werte in Abfrageergebnissen auftreten behindern die Datenanalyse. Betrachten Sie beispielsweise die folgende Abfrage:
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
Diese Abfrage ruft Daten aus zwei Tabellen (sysjobs und sysjobhistory) ab und führt Berechnungen basierend auf der runstatus-Spalte durch. Wenn runstatus jedoch NULL-Werte hat, kann die Abfrage unerwartete Ergebnisse zurückgeben.
NULL durch 0 ersetzen
Um NULL-Werte in SQL Server durch 0 zu ersetzen, verwenden Sie isnull ()-Funktion. Diese Funktion gibt den angegebenen Wert zurück, wenn der Eingabewert NULL ist; andernfalls wird der Eingabewert zurückgegeben.
isnull(myColumn, 0)
In der angegebenen Abfrage kann c.runstatus NULL-Werte haben. Um diese Werte durch 0 zu ersetzen, ändern Sie die Abfrage wie folgt:
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
Durch die Verwendung von isnull() werden NULL-Werte in c.runstatus durch 0 ersetzt, bevor Berechnungen durchgeführt werden. Dadurch wird sichergestellt, dass die Abfrage auch bei fehlenden Daten genaue Ergebnisse liefert.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit NULL-Werten in SQL Server-Abfragen um und ersetze sie durch 0?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!