请注意,在下面的查询中,括号内的前两个查询中,我添加了两个重复的查询,我相信这不是一个好的做法。我需要在需要价值的地方随时重复此查询。在SELECT中添加逻辑
SQL Server正在抛出关于不在SELECT关键字内部写入DECLARE的异常。我可以做什么或我缺少什么来重构它?根据需要
SELECT A.StudentId,
case
when B.OverwrittenScore is not null
then B.OverwrittenScore
else 0
end AS FinalScore
FROM dbo.Students AS A
LEFT JOIN dbo.OverwrittenScores B
ON B.StudentId = A.StudentId
AND B.AssignmentId = @assignmentId
如果你想使用其他选择的东西,那么你可以添加更多的联接:
SELECT A.StudentId,
(
CASE WHEN (SELECT B.OverwrittenScore
FROM dbo.OverwrittenScores AS B
WHERE B.StudentId = A.StudentId
AND B.AssignmentId = @assignmentId
) IS NOT NULL
THEN (
SELECT B.OverwrittenScore
FROM dbo.OverwrittenScores AS B
WHERE B.StudentId = A.StudentId
AND B.AssignmentId = @assignmentId)
ELSE (-- ANOTHER QUERY, BY THE MOMENT: SELECT 0)
END
) AS FinalScore
FROM dbo.Students AS A
我没有看到在你的查询'DECLARE' - 很难知道解决什么当我们看不到问题时。 –
什么是确切的例外? – logixologist
好吧,当我执行两个标量查询时,我正在写'DECLARE @value; SET @value = SELECT ...'而不是CASE关键字 –