Попытка заполнить таблицу поиска и продолжать получать нулевые значения, когда я хочу обновить таблицу приборов. Я предполагаю, что, поскольку я пытался изменить логику с жесткого кода на таблицу поиска, он не работает.Значения NULL при попытке выполнить UPDATE
Ниже показаны четыре таблицы (сверху вниз): - оценка - ScoreReference - Крепеж - TeamWeighting
Я хочу, чтобы попытаться определить разницу в teamWeighting между обеими сторонами для каждого прибора и на основе взвешивания он определяет оценку для обновления таблицы «Fixture», выбирая счет, соответствующий разнице мячей, в зависимости от разницы «TeamWeighting».
Как вы можете видеть, он отображает NULL, и я не уверен, почему это так.
Ниже приведен код запроса, который я знаю, что вызывает проблему:
;WITH cte AS
(
SELECT f.FixtureID,
ht.FinalTeamWeight - at.FinalTeamWeight AS TeamScore
FROM dbo.Fixture f
OUTER APPLY
(
SELECT tw.FinalTeamWeight
FROM dbo.TeamWeighting tw
WHERE tw.TeamID = f.HomeTeamID
) ht --HomeTeam
OUTER APPLY
(
SELECT tw.FinalTeamWeight
FROM dbo.TeamWeighting tw
WHERE tw.TeamID = f.AwayTeamID
) at --AwayTeam
WHERE f.HomeScore IS NULL AND f.FixtureDate < GETDATE()
)
UPDATE f
SET f.HomeScore = s.HomeScore,
f.AwayScore = s.AwayScore
FROM dbo.Fixture f
INNER JOIN
(
SELECT FixtureID,
TeamScore,
(
SELECT TOP (1)
CASE
WHEN c.TeamScore BETWEEN HomeWeighting AND AwayWeighting
THEN (SELECT TOP 1 ScoreID FROM dbo.Score WHERE HomeScore > AwayScore ORDER BY NEWID())
WHEN c.TeamScore BETWEEN AwayWeighting AND HomeWeighting
THEN (SELECT TOP 1 ScoreID FROM dbo.Score WHERE AwayScore > HomeScore ORDER BY NEWID())
END AS ScoreID
FROM dbo.Score s
LEFT JOIN ScoreReference sr
ON s.ScoreDifference = sr.ScoreDifference
) AS ScoreID -- end select case
FROM cte c
) -- end inner join
AS ScoreResult
ON f.FixtureID = ScoreResult.FixtureID
INNER JOIN Score s
ON ScoreResult.ScoreID = s.ScoreID
INNER JOIN ScoreReference sr
ON s.ScoreDifference = sr.ScoreDifference
Select * from dbo.Score
Select * from dbo.ScoreReference
SELECT * from dbo.Fixture
SELECT * From TeamWeighting
END
Это дубликат [Receving не агрегатную функцию или GROUP BY ошибки в КТР] (http://stackoverflow.com/questions/37914484/receving-not-an-aggregate-function- или-group-by-error-in-a-cte) – sagi
Hi Carl. Попробуйте поставить ELSE 0 в заявлении case на данный момент. Если вы получаете 0, то вы знаете, что есть проблема с заявлением CASE. – mvisser
@mvisser Я сделаю это сейчас и уточню, что происходит. Спасибо –