Sql server SQL中两个临时列之间的百分比差异
我正在尝试为此查询添加一列,该列将计算c.PopulationForecast和c.PopulationActualMAX和/或c.PopulationActualMin之间的百分比差异。如果只有一个专栏就好了,但我会选择两个Sql server SQL中两个临时列之间的百分比差异,sql-server,Sql Server,我正在尝试为此查询添加一列,该列将计算c.PopulationForecast和c.PopulationActualMAX和/或c.PopulationActualMin之间的百分比差异。如果只有一个专栏就好了,但我会选择两个 SELECT c.DepartmentName, c.DateandTime, c.ExecutionDate, c.PopulationForecast, c.PopulationActualMAX, c.PopulationActualMIN FROM (
SELECT c.DepartmentName, c.DateandTime, c.ExecutionDate, c.PopulationForecast, c.PopulationActualMAX, c.PopulationActualMIN
FROM
(SELECT DepartmentName, DateandTime, ExecutionDate FROM ForecastTable WHERE DateandTime >= CAST(GETDATE() AS DATE)) d
CROSS APPLY
(SELECT *,
(SELECT MAX(ACT.PopulationActual) FROM ActualsTable ACT JOIN DepartmentTable DTD ON DTD.DepartmentTypeID = ACT.DepartmentTypeId JOIN FacilityTable FD ON FD.FacilityID = ACT.FacilityID WHERE (ACT.TargetDateTime >= DATEADD(DAY, -28, d.DateandTime)) and (DATEPART(WEEKDAY, ACT.TargetDateTime) = DATEPART(WEEKDAY, d.DateandTime)) and (CONCAT(FD.FacilityKey,'.All',DTD.DepartmentTypeKey) = DepartmentName))
as PopulationActualMAX,
(SELECT MIN(ACT.PopulationActual) FROM ActualsTable ACT JOIN DepartmentTable DTD ON DTD.DepartmentTypeID = ACT.DepartmentTypeId JOIN FacilityTable FD ON FD.FacilityID = ACT.FacilityID WHERE (ACT.TargetDateTime >= DATEADD(DAY, -28, d.DateandTime)) and (DATEPART(WEEKDAY, ACT.TargetDateTime) = DATEPART(WEEKDAY, d.DateandTime)) and (CONCAT(FD.FacilityKey,'.All',DTD.DepartmentTypeKey) = DepartmentName))
as PopulationActualMIN
FROM ForecastTable
WHERE
DepartmentName = d.DepartmentName
and DateandTime = d.DateandTime
and (
(ROUND (PopulationForecast, 0) >
(
SELECT MAX(ACT.PopulationActual)
FROM ActualsTable ACT
JOIN DepartmentTable DTD ON DTD.DepartmentTypeID = ACT.DepartmentTypeId
JOIN FacilityTable FD ON FD.FacilityID = ACT.FacilityID
WHERE (ACT.TargetDateTime >= DATEADD(DAY, -28, d.DateandTime))
and (DATEPART(WEEKDAY, ACT.TargetDateTime) = DATEPART(WEEKDAY, d.DateandTime))
and (CONCAT(FD.FacilityKey,'.All',DTD.DepartmentTypeKey) = d.DepartmentName)
)
)
or
(ROUND (PopulationForecast, 0) <
(
SELECT MIN(ACT.PopulationActual)
FROM ActualsTable ACT
JOIN DepartmentTable DTD ON DTD.DepartmentTypeID = ACT.DepartmentTypeId
JOIN FacilityTable FD ON FD.FacilityID = ACT.FacilityID
WHERE (ACT.TargetDateTime >= DATEADD(DAY, -28, d.DateandTime))
and (DATEPART(WEEKDAY, ACT.TargetDateTime) = DATEPART(WEEKDAY, d.DateandTime))
and (CONCAT(FD.FacilityKey,'.All',DTD.DepartmentTypeKey) = d.DepartmentName)
)
)
)
) c
Order By d.DepartmentName, d.DateandTime
有什么东西阻止你把差异放在第一行吗 例如:
(c.PopulationForecast-c.PopulationActualMIN)/c.PopulationForecast ForecastVsMin
, (c.PopulationForecast-c.PopulationActualMAX)/c.PopulationForecast ForecastVsMax
从您的查询中,您似乎已经找到了所有要查找的三个字段。那么问题出在哪里?向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。尝试在中创建一个样本,然后有一行人口预测为零。在那种情况下,你的预期结果是什么?