0

私はこの声明を持っています:

SELECT  COUNT(AccedentId) AS NumberOfAccedentInYear
            FROM         Accident
            GROUP BY DriverId, YEAR(AccedentDate)
            HAVING     (DriverId =@DriverId)<3

行がある場合は有効なカウントを取得しますが、行がない場合は結果が空になります。一致する行がない場合、結果を0にします。

4

1 に答える 1

4

たぶんあなたはこれを望んでいたでしょう(私はより多くの情報なしでは本当に修正できない明らかな構文とスペルの誤りを保持しています):

SELECT NumberOfAccedentInYear = ISNULL
(
  (SELECT COUNT(AccedentId)
   FROM         Accident
   GROUP BY DriverId, YEAR(AccedentDate)
   HAVING     (DriverId =@DriverId)<3))
   , 0
);

COALESCEとISNULLの議論に興味があり、ISNULLを使用するように回答を変更した理由について、@kanavはCOALESCEの方が高価であると正しく指摘しました。ここで説明したように、COALESCEはサブクエリを2回評価します:https ://stackoverflow.com/a/10669660/61305

于 2012-05-23T23:57:57.400 に答える