2016-06-15 22 views
0

得点と得点とのゴール差と、各チームのホームと離脱時の目標との差を計算しようとしています。問題は、私はこのエラーが表示されます:式に集計関数を実行できません

集計またはサブクエリを含む式で集計関数を実行することはできません。

私は 'Goal_Difference'コードをコメントアウトし、この問題を引き起こしていることを知りたい場合は修正できます。

 SUM(
     CASE 
     WHEN t.TeamID = f.HomeTeamID THEN  
      CASE 
      WHEN f.HomeScore IS NOT NULL THEN f.HomeScore - f.AwayScore 
     -- Home Fixture 
      END 
     WHEN t.TeamID = f.AwayTeamID THEN 
      CASE 
      WHEN f.AwayScore IS NOT NULL THEN f.AwayScore - f.HomeScore 
     -- Away Fixture 
      END 
     END 
    ) AS Goal_Difference 

あなたがCASE前に合算されている場合、あなたはそれはそれは許可されていないsum(sum(..となり、WHENに再びまとめることはできません。

ALTER VIEW League_Table 
AS 
SELECT SUM(
    CASE 
     WHEN t.TeamID = f.HomeTeamID THEN f.HomeScore 
     -- Home Fixture 
     WHEN t.TeamID = f.AwayTeamID THEN f.AwayScore 
     -- Away Fixture 
     END 
     ) AS Goals_Scored, 

    SUM(
    CASE 
     WHEN t.TeamID = f.HomeTeamID THEN f.AwayScore 
     -- Home Fixture 
     WHEN t.TeamID = f.AwayTeamID THEN HomeScore 
     -- Away Fixture 
     END 
     ) AS Goals_Against 
    -- SUM(
     -- CASE 
     -- WHEN t.TeamID = f.HomeTeamID THEN  
     --  CASE 
     --  WHEN f.HomeScore IS NOT NULL THEN SUM(f.HomeScore) - SUM(f.AwayScore) 
     -- -- Home Fixture 
     --  END 
     -- WHEN t.TeamID = f.AwayTeamID THEN 
     --  CASE 
     --  WHEN f.AwayScore IS NOT NULL THEN SUM(f.AwayScore) - SUM(f.HomeScore) 
     -- -- Away Fixture 
     --  END 
     -- END 
     --) AS Goal_Difference 

FROM dbo.Team t 
--Season TBC 
INNER JOIN dbo.Fixture f ON t.TeamID IN (f.HomeTeamID, f.AwayTeamID) 
GROUP BY t.TeamName 


GO 

SELECT * 
FROM League_Table lt 
ORDER BY Points DESC--, Goal_Difference; 
+1

エラーメッセージはかなり明確です。集約内で集約を使用することはできません。あなたのケースでは、ケース式の中からSUMを削除するだけです。 –

+0

加算と減算の可換プロパティは、 'sum(sum(f1) - sum(f2))'を行う必要がないことを示唆しています。ちょうど 'sum(f1-f2)'であり、クエリで不正な二重集計や、内部集計をサブクエリにプッシュしなくても同じ結果が得られます。 – JNevill

+0

@JNevillでは、 'SUM(f1)+ SUM(f2)'は 'null 'が存在する場合に' SUM(f1 + f2) 'と異なる結果を返すことができます。 –

答えて

1

これに変更Goal_Differenceありがとうございます。私はあなたが意図したものではないと仮定していたので、私はちょうど内の和を削除しました。

+0

ありがとう、それは働いて、次回は知っている –

関連する問題