私はMS SQL 20012を使用しており、コードは次のようなストアドプロシージャを持っています:
USE [StatsAa]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[DriverVSComp]
-- Add the parameters for the stored procedure here
@PERSON_NO nvarchar(50)
AS
SET NOCOUNT ON;
DECLARE @weeks int = 26
;WITH Person AS (
SELECT
datediff(ww, DATE_GIVEN, getdate())+1 AS Week,
AVG(CHECK_AMOUNT) AS Person_Check_Amount
FROM CHECKS
WHERE PERSON_NO=11 AND DATE_GIVEN >= dateadd(ww, -@weeks, getdate())
GROUP BY datediff(ww, DATE_GIVEN, getdate()) +1
)
, Company AS (
SELECT week,
AVG (COMPANY_Check_Amount) AS COMPANY_Check_Amount
FROM (
SELECT
datediff(ww, DATE_GIVEN, getdate())+1 AS Week,
SUM(CHECK_AMOUNT)/COUNT(DISTINCT PERSON_NO) AS COMPANY_Check_Amount
FROM CHECKS
WHERE PERSON_NO<>11 AND DATE_GIVEN >= dateadd(ww, -@weeks, getdate())
GROUP BY datediff(ww, DATE_GIVEN, getdate())+1
) t
GROUP BY Week
)
SELECT c.week
, isnull(Person_Check_Amount,0) Person_Check_Amount
, isnull(Company_Check_Amount,0) Company_Check_Amount
FROM Person p
FULL OUTER JOIN Company c ON c.week = p.week
ORDER BY Week DESC
しかし、私はこのエラーを受け取り続けます:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14'
[Microsoft][SQL Server Native Client 11.0][SQL Server]Divide by zero error encountered.
MSSMS から実行すると、正常に動作し、結果が表示されますが、次のコマンドを 1 回実行した後でのみです。
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
しかし、ページ (.asp ページ) を実行するとエラーが引き続き発生します。
これは一部の値が Null であるためだと読んでいましたが、これを安全にストアド プロシージャに入れるにはどうすればよいですか? ドライバーとコンプをオフセットするため、Null 値があるため、データが失われたり、渡されたり、無視されたりしないことが非常に重要です。データと平均。NULL に遭遇したときにゼロ '0' またはデフォルト値を設定することは可能ですか? また、問題を引き起こしている列/行を見つけるにはどうすればよいですか。
いつものように、事前に助けてくれてありがとう!