【发布时间】:2012-07-06 16:57:49
【问题描述】:
我正在使用此查询来计算从当前学期到上一学期的入学总数百分比变化。我需要对此查询进行哪些更改以避免空值? 我尝试过使用非常慢的子查询。
SELECT E2.Term AS Prev_Term,
E2.[Enrollment Total] AS Prev_Enrl_Tot,
E1.Term,
E1.Location,
E1.milestone_description,
E1.polling_date,
Round(((E1.[Enrollment Total] - [Prev_Enrl_Tot])
/ [Prev_Enrl_Tot]) * 100,2) AS Percent_Change
FROM EnrollmentsByLocation E1
LEFT OUTER JOIN EnrollmentsByLocation E2
ON E1.Location = E2.Location
AND E1.milestone_description = E2.milestone_description
AND E1.Term - E2.Term = 1;
【问题讨论】:
-
您是要在百分比计算中避免空值(将空值替换为 0)还是要同时避免包含空值的行(使用 where 子句消除空行)?
-
不能只用 0 替换空行(例如,用
COALESCE),你会得到一个被零除的错误。如果前一个术语不存在,那会使百分比变化 100% - 那么您是否应该使用简单的CASE语句并仅输出 100? -
你说你想避免 NULL,但你没有说你做想要什么行为。
-
将左外连接更改为连接。这样,您将只获得匹配的记录。
-
内连接成功了!!谢谢@GordonLinoff