Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL中两个临时列之间的百分比差异_Sql Server - Fatal编程技术网

Sql server SQL中两个临时列之间的百分比差异

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 (

我正在尝试为此查询添加一列,该列将计算c.PopulationForecast和c.PopulationActualMAX和/或c.PopulationActualMin之间的百分比差异。如果只有一个专栏就好了,但我会选择两个

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

从您的查询中,您似乎已经找到了所有要查找的三个字段。

那么问题出在哪里?向我们显示数据库模式、示例数据、当前和预期输出。请阅读,这里是学习如何提高问题质量和获得更好答案的好地方。尝试在中创建一个样本,然后有一行人口预测为零。在那种情况下,你的预期结果是什么?