【发布时间】:2014-07-14 16:26:33
【问题描述】:
我目前遇到除以零的问题 - 我正在尝试实现 CASE 以将除数标记为“1”但是,我仍然收到错误 - 我猜我'我在这里遗漏了什么?只是不确定是什么...
SELECT
CASE WHEN c.PageCount IS NULL OR c.PageCount=0 THEN 1 ELSE c.PageCount END as [PageCount],
cast(c.PageCount / CASE WHEN DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate) IS NULL OR DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate) = 0 THEN 1 ELSE DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate)END as decimal(5,2)) as PagesPerMinute,
CASE
WHEN DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate) >= 30 AND CAST(DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate) AS FLOAT)/CAST([PageCount] AS FLOAT) >= 1 THEN
CASE WHEN CAST([PageCount] AS FLOAT) * 0.5 /*Half minute*/ > 45 /*minutes*/ THEN 45 ELSE CAST([PageCount] AS FLOAT) * 0.5 /*Half minute*/ END
WHEN DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate) >= 60 AND CAST(DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate) AS FLOAT)/CAST([PageCount] AS FLOAT) < 1 /* 1 minute/page */ THEN 60
ELSE
DATEDIFF(mi, ev.EventCreateDate, ev.EventCompletionDate)
END [MinutesPaid]
FROM
tbl_Charts c
left outer join (select cd.ChartId, count(*) as CodesFound from tbl_ChartCodes cd group by cd.ChartId) cd on cd.ChartId = c.ChartId,
tbl_WFChartEvents ev,
tbl_Users u,
(select evar.ChartId, evar.ActionUserId, ar.ResultDescription, evar.ActionRemark, evar.ActionDate
from tbl_WFChartEventActions evar, tbl_WFChartEventActionResults ar
where evar.EventId = 201
and evar.ActionResultId = ar.ResultID and evar.EventId = ar.EventID
and evar.ActionTypeId = ar.ActionTypeID
and evar.EventId = 201) arr
WHERE
c.ChartId = ev.ChartId
and ev.EventId = 201
and ev.EventCreateUserId = u.UserId
and arr.ActionUserId = u.UserId
and arr.ChartId = c.ChartId
order by ev.EventCreateDate
【问题讨论】:
-
您的页数是多少?尝试注释掉 select 中的每一列,直到您确定是哪一列导致了错误。
-
正如下面提到的@Bowlturner - 我认为选择底部的 Case 语句中的 PageCount 只是将 c.PageCount 信息减去我结合的所有 Case When 信息PageCount - CASE WHEN c.PageCount 为 NULL 或 c.PageCount=0 THEN 1 ELSE c.PageCount END
标签: sql sql-server ssms