【发布时间】:2017-11-27 12:57:10
【问题描述】:
我很难弄清楚为什么报表生成器中的子查询返回多行。
(
SELECT
(
CASE
WHEN C.CourseCode IN ('50089079','50089080') THEN 'L2 Maths FS'
WHEN C.CourseCode IN ('50089067','50089109') THEN 'L1 Maths FS'
WHEN C.CourseCode IN ('50084987','50092959') THEN 'E3 Maths FS'
WHEN C.CourseCode IN ('50084975','50091967') THEN 'E2 Maths FS'
WHEN C.CourseCode IN ('50084963','50091724') THEN 'E1 Maths FS'
WHEN C.CourseCode IN ('60146084') THEN 'GCSE Maths'
Else 'NA'
END
)
FROM
Enrolment E
INNER JOIN
Course C ON C.CourseID = E.CourseID
WHERE
E.PMStudentID = vReports_Enrolment.PMStudentID
AND C.CourseCode IN ('50089079', '50089080', '50089067', '50089109', '50084987', '50092959', '50084975', '50091967', '50084963', '50091724', '60146084')
AND vReports_Enrolment.CompletionID = 1
)
这是弹出此错误的特定学习者的数据 - 我已经突出显示,如果不是检查 CompletionID 是否为“1”,通常会返回 2 行:
CourseCode CompletionID
-------------------------
50044357 1
50044369 1
50089079 0
60146084 1
60187578 1
60148366 1
在这种情况下,预期的行为是返回“GCSE 数学”——我做错了吗?
【问题讨论】:
-
您发布的当前输出与位于其上方的查询不直接对应。你能编辑你的问题吗?关于您的错误,这是不言自明的。您在 select 子句中有一个返回多个记录/值的子查询,这是没有意义的。
-
整个查询量很大,只是这部分掉了下来。我希望,根据 CASE,如果 CourseCode 在指定的范围内并且它的 CompletionID 是 1,它会返回 1 个值。
-
我们需要查看整个查询。是的,选择子句中的单个
CASE表达式不应触发此错误,这就是为什么这可能不是问题的原因。 -
刚刚将
TOP 1添加到选择中...似乎有效-耸耸肩-
标签: sql sql-server ssrs-2012 reportbuilder3.0