如何修复where子句中的聚合?

Dan*_*nny 6 sql-server view

消息 147,级别 15,状态 1,过程 vw_OverBudget,第 10 行 [批处理开始第 59 行]
聚合可能不会出现在 WHERE 子句中,除非它位于 HAVING 子句或选择列表中包含的子查询中,并且正在聚合的列是一个外部参考。

代码:

CREATE VIEW vw_OverBudget 
AS
    SELECT
        p.projectName,
        SUM(a.costtodate) AS sumActivityCosts,
        p.fundedbudget
    FROM
        Project AS p
    FULL OUTER JOIN
        Activity a ON p.projectid = a.projectid  
    WHERE 
        a.activityId IS NULL
        AND p.projectid IS NOT NULL
        AND SUM(a.costtodate) > p.fundedbudget
    GROUP BY
        p.projectID
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

full outer join此查询不需要A。对于你的逻辑, aleft join似乎是正确的:

Select p.projectName, sum(a.costtodate) AS sumActivityCosts,
       p.fundedbudget
From Project p left join
     Activity a 
     on p.projectid = a.projectid  
where a.activityId is null and p.projectid is not null 
Group By p.projectName, p.fundedbudget
having sum(a.costtodate) > p.fundedbudget;
Run Code Online (Sandbox Code Playgroud)

然而,这对我来说没有意义。如果a.activityId为空,则最可能的原因是没有匹配。所以,我很确定你只想要一个inner join不带where子句的:

Select p.projectName, sum(a.costtodate) AS sumActivityCosts,
       p.fundedbudget
From Project p inner join
     Activity a 
     on p.projectid = a.projectid
Group By p.projectName, p.fundedbudget
having sum(a.costtodate) > p.fundedbudget;
Run Code Online (Sandbox Code Playgroud)