Traitement des valeurs NULL dans les requêtes SQL Server : remplacement par 0
Lorsque vous travaillez avec des bases de données SQL Server, la rencontre de valeurs NULL dans les résultats des requêtes peut gêner l’analyse des données. Par exemple, considérons la requête suivante :
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
Cette requête récupère les données de deux tables (sysjobs et sysjobhistory) et effectue des calculs basés sur la colonne runstatus. Cependant, si runstatus a des valeurs NULL, la requête peut renvoyer des résultats inattendus.
Remplacement de NULL par 0
Pour remplacer les valeurs NULL par 0 dans SQL Server, utilisez isnull () fonction. Cette fonction renvoie la valeur spécifiée si la valeur d'entrée est NULL ; sinon, il renvoie la valeur d'entrée.
isnull(myColumn, 0)
Dans la requête donnée, c.runstatus peut avoir des valeurs NULL. Pour remplacer ces valeurs par 0, modifiez la requête comme suit :
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
En utilisant isnull(), les valeurs NULL dans c.runstatus sont remplacées par 0 avant d'effectuer les calculs. Cela garantit que la requête renvoie des résultats précis même en présence de données manquantes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!