得点と得点とのゴール差と、各チームのホームと離脱時の目標との差を計算しようとしています。問題は、私はこのエラーが表示されます:式に集計関数を実行できません
集計またはサブクエリを含む式で集計関数を実行することはできません。
私は '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;
エラーメッセージはかなり明確です。集約内で集約を使用することはできません。あなたのケースでは、ケース式の中からSUMを削除するだけです。 –
加算と減算の可換プロパティは、 'sum(sum(f1) - sum(f2))'を行う必要がないことを示唆しています。ちょうど 'sum(f1-f2)'であり、クエリで不正な二重集計や、内部集計をサブクエリにプッシュしなくても同じ結果が得られます。 – JNevill
@JNevillでは、 'SUM(f1)+ SUM(f2)'は 'null 'が存在する場合に' SUM(f1 + f2) 'と異なる結果を返すことができます。 –