2017-04-19 9 views
1

メッセージ147、レベル15、状態1、プロシージャvw_OverBudget、ライン10 [バッチスタートライン59]
それがHAVING句または選択リストに含まれるサブクエリでない限り、集合体がWHERE句に表示されないことがあり 、集約される列は外部参照です。どのように集計をどこ節で修正するのですか?

コード:

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 

答えて

1

full outer joinは、このクエリでは必要ありませんになります。あなたのロジックのために、left 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; 

しかし、これは私には意味がありません。 a.activityIdがヌルの場合、最も可能性の高い理由は一致しません。インナー付き

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; 
+0

が参加し、私はあなたがなぜ私が取得していたデータを見た後に参加のそのタイプと行く参照:だから、私はあなただけなしwhere句とinner joinをしたいかなり確信しています列 'Project.projectName'のエラーです。集計関数やグループに含まれていないため無効です。 – Danny

+0

解決策を見つけました。私は、グループにp.projectNameを追加するだけでした。 – Danny

1

SQL Serverおよびグループの下のフィールドが欠落し

Group By 
    p.projectID 
,p.fundedbudget --- to add 

によると

having sum > 
を追加する他のデータベースに多分適用WHERE句

更新で

削除合計は

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 
    Group By 
     p.projectID, p.fundedbudget 
having SUM(a.costtodate) > p.fundedbudget 
    go