SQL 服务器/报表生成器子查询 returns 多行错误
SQL Server / Report Builder subquery returns more than one row error
我正在努力弄清楚为什么报表生成器中的子查询 return 不止一行。
(
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
)
这是弹出此错误的特定学习者的数据 - 我已经突出显示通常会有 2 行的地方 return 如果不检查 CompletionID 是否为“1” ':
CourseCode CompletionID
-------------------------
50044357 1
50044369 1
50089079 0
60146084 1
60187578 1
60148366 1
在这种情况下的预期行为是 return 'GCSE Maths' - 我做错了什么吗?
已添加:
(
SELECT TOP 1
(
CASE
确保只返回一行,这是预期的行为。
在某些情况下,您有两行或更多行。
使用 TOP 1 只会选择第一个,这并不能保证它就是您想要的,尤其是当您的数据不如您想象的那么干净时。
使用 SELECT DISTINCT ...
更安全。这样,如果所有返回的行都相同,只是重复,那么您将得到正确的答案。如果仍然出现错误,则需要调查子查询结果。
我正在努力弄清楚为什么报表生成器中的子查询 return 不止一行。
(
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
)
这是弹出此错误的特定学习者的数据 - 我已经突出显示通常会有 2 行的地方 return 如果不检查 CompletionID 是否为“1” ':
CourseCode CompletionID
-------------------------
50044357 1
50044369 1
50089079 0
60146084 1
60187578 1
60148366 1
在这种情况下的预期行为是 return 'GCSE Maths' - 我做错了什么吗?
已添加:
(
SELECT TOP 1
(
CASE
确保只返回一行,这是预期的行为。
在某些情况下,您有两行或更多行。
使用 TOP 1 只会选择第一个,这并不能保证它就是您想要的,尤其是当您的数据不如您想象的那么干净时。
使用 SELECT DISTINCT ...
更安全。这样,如果所有返回的行都相同,只是重复,那么您将得到正确的答案。如果仍然出现错误,则需要调查子查询结果。