我想包含以下代码行来执行计算:
SUM((InitialTeamWeight / 10) * Form + InitialTeamWeight) AS FinalTeamWeight
但问题是我无法调用同一SELECT语句中的列。我尝试在此查询上方添加一个子查询,选择上述计算,但这会为所有团队而不是单个团队执行计算。
如果要将计算添加到查询中而不出现未定义列的问题,我需要做些什么?
以下是当前查询:
SELECT TeamID,
CASE WHEN TeamID = 0 THEN 0
ELSE SUM(po.playerWeighting)
END TeamWeight
--ABS(CHECKSUM(NewID())) % 10 + 1 AS Form
-- cte
FROM(
SELECT pl.*,
ROW_NUMBER() OVER(PARTITION BY pl.TeamID, pl.Position ORDER BY NEWID()) AS Rnk
-- cte
FROM(
SELECT DISTINCT p.PlayerID, p.Position, p.PlayerWeighting, p.FirstName, p.Surname, t.TeamID, t.TeamAbbreviation, f.WeekNumber
FROM dbo.Fixture f
INNER JOIN dbo.League l ON f.LeagueID = l.LeagueID
INNER JOIN dbo.Team t ON l.LeagueID = t.LeagueID
INNER JOIN dbo.Player p ON t.TeamID = p.TeamID
WHERE f.WeekNumber = 1)
pl) po
WHERE (po.Position = 'GK' and po.rnk = 1) OR
(po.Position = 'DF' and po.rnk <= 4) OR
(po.Position = 'MF' and po.rnk <= 4) OR
(po.Position = 'FW' and po.rnk <= 2)
GROUP BY TeamID
答案 0 :(得分:0)
我不是100%清楚你要做的是什么,但我猜你有TeamWeight
,现在想在你的公式中使用InitialTeamWeight
我添加了2个CTE(可能会帮助您使用CTE的语法)并从主查询中删除CASE
。如果CTE中playerWeighting
为0,则TeamID
设置为0,这导致TeamId = 0
的总和相同
WITH pl AS (SELECT DISTINCT p.PlayerID
p.Position
,CASE WHEN p.TeamID = 0 THEN 0
ELSE p.playerWeighting END AS playerWeighting
,p.FirstName
,p.Surname
,t.TeamID
,t.TeamAbbreviation
,f.WeekNumber
FROM dbo.Fixture f
INNER JOIN dbo.League l ON f.LeagueID = l.LeagueID
INNER JOIN dbo.Team t ON l.LeagueID = t.LeagueID
INNER JOIN dbo.Player p ON t.TeamID = p.TeamID
WHERE f.WeekNumber = 1)
,po AS (SELECT *,ROW_NUMBER() OVER(PARTITION BY pl.TeamID, pl.Position ORDER BY NEWID()) AS Rnk FROM pl)
SELECT TeamID
,SUM(po.playerWeighting) AS TeamWeight
,SUM((SUM(po.playerWeighting) / 10) * Form + SUM(po.playerWeighting)) AS FinalTeamWeight
--ABS(CHECKSUM(NewID())) % 10 + 1 AS Form
FROM po
WHERE (po.Position = 'GK' and po.rnk = 1) OR
(po.Position = 'DF' and po.rnk <= 4) OR
(po.Position = 'MF' and po.rnk <= 4) OR
(po.Position = 'FW' and po.rnk <= 2)
GROUP BY TeamID
我不确定这是否是你需要的,但也许有帮助