【发布时间】:2015-03-03 11:46:55
【问题描述】:
我有一个烦人的问题,它阻止我生成一些数据; SQL作业一共23步,21日失败。
-- Step 21 Create the table z1QReportOverview
-- Create z1QReportProjectOverview.sql
-- Project Overview - By Category (Part 4).sql
USE database
SELECT z1QReportProjectOverview1.[ERA Category] AS Category,
z1QReportProjectOverview1.[Total Projects Signed],
z1QReportProjectOverview1.[Total Spend Under Review],
z1QReportProjectOverview1.[Avg. Project Size],
z1QReportProjectOverview2.[Work in Progress],
z1QReportProjectOverview2.[Implemented],
z1QReportProjectOverview2.[No Savings],
z1QReportProjectOverview2.[Lost],
CONVERT(decimal(18,0),[Lost])/CONVERT(decimal(18,0),[Total Projects Signed]) AS [Loss Ratio],
z1QReportProjectOverview2.[Completed],
(
CONVERT(decimal(18,0),([Completed]+[Implemented]))/
CONVERT(decimal(18,0),([Completed]+[Implemented]+[Lost]))
)
AS [Success Ratio],
z1QReportProjectOverview3.[Avg. Spend] AS [Average Spend],
z1QReportProjectOverview3.[Avg. Savings] AS [Average Savings],
z1QReportProjectOverview3.[Avg. Savings %] AS [Average Savings %]
INTO dbo.z1QReportProjectOverview
FROM dbo.z1QReportProjectOverview1
JOIN dbo.z1QReportProjectOverview2
ON (z1QReportProjectOverview1.[ERA Category] = z1QReportProjectOverview2.[ERA Category])
JOIN dbo.z1QReportProjectOverview3
ON (z1QReportProjectOverview2.[ERA Category] = z1QReportProjectOverview3.[ERA Category])
ORDER BY Category
我相信我知道导致除以零错误的原因。
“丢失”字段由三个字段组成,在某些情况下(非常罕见)所有 3 个字段均为 0,导致“丢失”字段为 0。
我相信这是错误的主要原因,但那里也有第二个部门,我对 SQL 很垃圾,因此我的问题是:
我应该把 CASE WHEN 子句放在哪里?
-很可能这点也写错了:( "CASE When [Lost] = 0 SET [Total Projects Signed] = 0"
非常感谢任何建议!
【问题讨论】:
-
当除数为零时,您可以使用案例来输出零,或者只是使用过滤器完全退出该记录以避免零除数(因为除以零是有意义的,因此踩上的记录并不罕见这也是意义),取决于您的要求
-
每当我输入“/”时,我都会尝试输入以下代码。我无法获得任何宏来做到这一点,所以我必须依靠我的大脑。这是我尝试输入的内容:/NULLIF (divisor, 0)。详细解释见stackoverflow.com/questions/861778/…
标签: sql sql-server divide