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 ... 更安全。这样,如果所有返回的行都相同,只是重复,那么您将得到正确的答案。如果仍然出现错误,则需要调查子查询结果。