2017-11-27 18 views
0

レポートビルダーのサブクエリが複数の行を返す理由を把握していません。 SQL Server/Report Builderサブクエリで複数の行エラーが返される

(
    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行がCompletionIDは、それが「1」だかどうかを確認するためにチェックされていない場合に返さがあることになるところ、私が強調してきた:

CourseCode CompletionID 
------------------------- 
50044357 1 
50044369 1 
50089079 0 
60146084 1 
60187578 1 
60148366 1 

この場合の予想される動作は、「GCSE数学」を返すことです。何か問題がありますか?

+0

あなたが投稿した現在の出力は、その上にあるクエリに直接対応していません。あなたの質問を編集できますか?あなたのエラーに関して、それはかなり自明です。複数のレコード/値を返すselect句にサブクエリがあり、意味がありません。 –

+0

全体的なクエリは膨大で、この部分だけが転倒します。 CASEに基づいて、CourseCodeが指定された範囲にあり、CompletionIDが1の場合、正確に1の値を返します。 –

+0

_entire_クエリを確認する必要があります。はい、select句の単一の 'CASE'式がこのエラーを引き起こすべきではありません。これが問題ではない可能性があります。 –

答えて

0

を追加しました:

(
    SELECT TOP 1 
    (
     CASE 

が一列のみが返されることを確認し、正常な動作です。

1

2行以上の行がある場合があります。

TOP 1を使用すると、あなたのデータがあなたが思っているほどきれいでない場合は、あなたが望むものであることが保証されません。

SELECT DISTINCT ...を使用する方が安全です。そうすれば、返された行がすべて同じで、重複していれば、正しい答えが得られます。引き続きエラーが発生した場合は、サブクエリの結果を調べる必要があります。

関連する問題