1

NULL次のクエリは、代わりにnull 値を返す以外はうまく機能します0。具体的には、これは指定された日付範囲で何かが発生した回数を合計しています。値がパラメーター内に存在しない場合 (つまりNULL、)、読みやすくするために、0 を返したいと思います (複数の一時テーブルの結合であるテーブルには整数のみが含まれます)。このケース「SQL 関数から単一の値を取得するときに NULL を 0 に変更するにはどうすればよいですか?」を見つけ、そこにあるすべての提案を試しCOALESCEました。

(SELECT tn.teamtext, tn.teamid, ISNULL(sum(ISNULL(case when CONVERT(smalldatetime,ca.dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 else 0 end, 0)), 0) AS cnt3
  FROM teamnames AS tn 
    LEFT OUTER JOIN caseaudit AS ca
    ON tn.teamID = ca.referteamID2
  WHERE ca.referteamid1 <> ca.referteamid2 AND ca.isactive = 1 AND ca.groupid = 18 AND ca.accountid = 2 AND ca.referteamid1 = 31 AND ca.auditnote <> 'Suspend Case'
  GROUP BY tn.teamtext, tn.teamid) AS c

私が見ている返されたテーブルのアイデアを与えるために、ここにそれがあります:

4H BOSS                    55   59  3
4H BSG                     0    3   2
4H SALES AND MKTG          0    0   0
ACCOUNTS RECEIVABLE        0    0   0
ASSET MANAGEMENT           9    16  0
AUDIT                      0    0   NULL
BOSS                       4    5   0
CORPORATE BSG              0    7   5
CUSTOMER SUPPORT           87   133 NULL
NETWORK ENGINEERING        11   15  0
PRODUCTION ENGINEERING     116  142 5
PRODUCTION OPERATIONS      0    1   0
SECURITY                   2    6   3
SNFAL PRODUCT TEAM         0    14  11
VOICE SERVICES             18   21  0
XEROX                      4    8   0
4

3 に答える 3

2

(これまでのところ) 他の 2 つの応答に同意します。このクエリの NULL ロジックは、あなたが言うように機能するはずです。しかし...

ローカルテーブルでクエリのようなものを実行しましたが、すべて正常に実行されました。次に、最も外側の括弧を追加しました。

(SELECT...
 ...) AS c

SQLはその形式をサポートしていないため、エラーが発生しました。これは、クエリに3つしかリストされていない4つの列を示すサンプルと組み合わせると、これがより大きなクエリのサブクエリであると強く疑われます...その場合、null/not nullの問題はおそらくこのサブクエリだけでなく、完全なクエリのロジック。私の推測が正しければ、検討のために完全なクエリを投稿してください。

于 2012-06-06T18:19:40.087 に答える
1

CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10'正しいテーブルを参照しているため、NULLと評価される場合があり、ケースが取得されていないと思います。

明示的にやってみることができますかwhen (dModLast is null) then 0

編集:

case
   when dModLast is null then 0
   when CONVERT(smalldatetime,dModLast,101) BETWEEN '2012-03-01' AND '2012-03-10' then 1 
   else 0 
end 
于 2012-06-06T15:56:25.203 に答える