111

データがnullの場合に問題が発生し、結果が表示されるときに警告が表示されます。この問題を解決する方法は?テーブルにデータがない場合にnullデータを0に変更するにはどうすればよいですか?

これは私のコードです:-

SELECT DISTINCT c.username             AS assigner_officer,
                d.description          AS ticketcategory,
                (SELECT Count(closed)
                 FROM   ticket
                 WHERE  assigned_to = c.user_id
                        AND closed IS NOT NULL
                 GROUP  BY assigned_to)closedcases,
                (SELECT Count(closed)
                 FROM   ticket
                 WHERE  assigned_to = c.user_id
                        AND closed IS NULL
                 GROUP  BY assigned_to)opencases
FROM   ticket a
       JOIN ticketlog b
         ON a.ticketid = b.ticketid
       JOIN access c
         ON a.assigned_to = c.user_id
       JOIN ticket_category d
         ON a.cat_code = d.id
       JOIN lookup_department e
         ON a.department_code = e.code 

結果は次のようになります:-

 Warnings: ---> 
   W (1): Warning: Null value is eliminated by an aggregate or other SET operation.
          <--- 
 assigner_officer     ticketcategory     closedcases     opencases    
 -------------------  -----------------  --------------  ------------ 
 abdulhafiz           Enquiry            (null)          0            
 affan                Enquiry            12              (null)       
 amirul               Enquiry            1               (null)       
 azrul_fahmi          Enquiry            45              0            
 Azwani               Enquiry            (null)          0            
 chai                 Enquiry            4               (null)       
 dalinawati           Enquiry            1               0            
 Emmy                 Complaints         (null)          0            
 Fadhlia              Enquiry            38              0            
 fairulhalif          Others             1               (null)       
 farikh               Enquiry            (null)          0            
 ismailh              Enquiry            28              0            
 izzahanna            Enquiry            (null)          0            
 Kamsuzilawati        Enquiry            1               (null)     
4

6 に答える 6

115

ほとんどの場合COUNT、UID を介して要約するために使用します。したがって

COUNT([uid])警告が生成されます:

警告: Null 値は、集計またはその他の SET 操作によって削除されます。

カウントされたオブジェクトが存在しない左結合で使用されている間。

この場合にを使用COUNT(*)すると、存在する結果 (つまり、親) の総数をカウントすることになるため、正しくない結果もレンダリングされます。

ISを使用COUNT([uid])することは有効なカウント方法であり、警告は警告にすぎません。ただし、心配で、この場合の uid の真のカウントを取得したい場合は、次を使用できます。

SUM(CASE WHEN [uid] IS NULL THEN 0 ELSE 1 END) AS [new_count]

これにより、クエリに多くのオーバーヘッドが追加されることはありません。(mssql 2008 でテスト済み)

于 2013-01-08T13:42:15.950 に答える
28

この問題を解決する 1 つの方法は、警告をオフにすることです。

SET ANSI_WARNINGS OFF;
GO
于 2013-05-02T13:59:54.723 に答える
17

用途ISNULL(field, 0)It は集計でも使用できます。

ISNULL(count(field), 0)

ただし、変更を検討することもできますcount(field) to count(*)

編集:

試す:

closedcases = ISNULL(
   (select count(closed) from ticket       
    where assigned_to = c.user_id and closed is not null       
    group by assigned_to), 0), 

opencases = ISNULL(
    (select count(closed) from ticket 
     where assigned_to = c.user_id and closed is null 
     group by assigned_to), 0),
于 2012-07-08T15:37:46.763 に答える
13

関数の外側ではなく、関数のISNULL内側に配置する必要があります。COUNT

良くない:ISNULL(COUNT(field), 0)

良い:COUNT(ISNULL(field, 0))

于 2014-12-10T15:05:40.620 に答える
-1

このエラーが発生していました。WHERE句内で使用されたフィールドに句を入れただけcountです。それは問題を解決しました。注: null 値が存在する場合は、カウントから除外されているため、レポートにとって重要かどうかを確認してください。

古いクエリ:

select city, Count(Emp_ID) as Emp_Count 
from Emp_DB
group by city

新しいクエリ:

select city, Count(Emp_ID) as Emp_Count 
from Emp_DB
where Emp_ID is not null
group by city
于 2018-12-28T11:32:24.127 に答える