sql >> データベース >  >> RDS >> Sqlserver

ヌルまたはゼロの値を無視してAVGを取得する

    NULL はすでに無視されているため、NULLIFを使用できます 0を回す NULLへ 。また、DISTINCTは必要ありません とあなたのWHERE ActualTime sargableではありません。

    SELECT AVG(cast(NULLIF(a.SecurityW, 0) AS BIGINT)) AS Average1,
           AVG(cast(NULLIF(a.TransferW, 0) AS BIGINT)) AS Average2,
           AVG(cast(NULLIF(a.StaffW, 0) AS BIGINT))    AS Average3
    FROM   Table1 a
    WHERE  a.ActualTime >= '20130401'
           AND a.ActualTime < '20130501' 
    

    PS私はTable2 bが何であるかわかりません 結合条件がないため、元のクエリに含まれているため、回答から省略しています。



    1. Oracleの値のリストから選択するにはどうすればよいですか

    2. SQLServerのログオントリガー

    3. SQL Serverで「datetime2」を「datetimeoffset」に変換します(T-SQLの例)

    4. 整数配列をc#でoracleプロシージャに渡します