我有一个零除错误。请帮助我。
,CASE U.BasePool
WHEN 0 THEN 'N/A'
WHEN -1 THEN 'N/A'
ELSE CASE
WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) > U.BasePool THEN 'IN-OVERAGE'
--WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) + (SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID)/MonthNum) > U.BasePool THEN DATEADD(MM, 1, GETDATE())
ELSE CONVERT(VARCHAR(20),DATEADD(MM,CAST(ROUND((U.BasePool - SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID))
/(SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID)/MonthNum),0) as INT), GETDATE()),101)
--(basepool - sumcontract) / (sumcontract/monthNum ) is the expected months to reach overage
END
END AS ExpectedDate
答案 0 :(得分:1)
在这种情况下,请先检查(SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID)/MonthNum),0) as INT)
= 0
。如果是这样,请返回您想要的特定值(如NULL
)。
答案 1 :(得分:0)
使用Try& SQL Server中的Catch:从MSDN获取的引用 语法如下。
BEGIN TRY
SELECT *
FROM sys.messages
WHERE message_id = 21;
END TRY
GO
-- The previous GO breaks the script into two batches,
-- generating syntax errors. The script runs if this GO
-- is removed.
BEGIN CATCH
SELECT ERROR_NUMBER() AS ErrorNumber;
END CATCH;
GO
在Begin Try块中,您可以编写语句,如果在语句中发生任何错误,那么它将由Catch块处理。
答案 2 :(得分:0)
尝试使用ISNULL(../ NULLIF())检查表达式
的CASE,CASE U.BasePool
WHEN 0 THEN 'N/A'
WHEN -1 THEN 'N/A'
ELSE CASE
WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) > U.BasePool THEN 'IN-OVERAGE'
--WHEN SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID) + (SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID)/MonthNum) > U.BasePool THEN DATEADD(MM, 1, GETDATE())
ELSE ISNULL(CONVERT(VARCHAR(20),DATEADD(MM,CAST(ROUND((U.BasePool - SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID))
/NULLIF((SUM(SUM(B.TransactionCount)) OVER (Partition by U.ContractID)/MonthNum), 0), 0) as INT), GETDATE()) ,101), 0)
--(basepool - sumcontract) / (sumcontract/monthNum ) is the expected months to reach overage
END
END AS ExpectedDate
上的简单演示