2011-12-05 13 views
0

私はWebアプリケーションを開発しています。今では、このアプリケーションがデータベースからいくつかのレポートを生成できるようにする必要があります。私は非常に複雑な構造の巨大なデータベースを持っています。私は大規模なSQLクエリを考え出し、データベースの構造を少し変更するまではうまくいっていました。私はこれらの変更に応じて修正しましたが、まだ動作しません。 SQLServer Management Studioでテストしたところ、失敗しました。時にはエラーが構文であることがわかります。時にはそれは私に "'とのエラーを伝えます。このSQLクエリーで何が間違っていますか?

データベースのシンプルな構造:

employeeテーブル:名、ユーザー名、JobTitle、BadgeNo、EmpOrgType、DivisionID

Departmentsテーブル: DepartmentCode、DepartmentName

コーステーブル: CourseID、CourseName、GroupID

グループID、GroupNameの

employee_courses:グループテーブルは社員コード、courseID

各テーブルの最初の属性は、最後のテーブルを除く各テーブルの主キーであり、テーブルをemployee_courses。

クエリがある:名前、ユーザー名、JobTitle、BadgeNo、EmpOrgTypeとDivisionName:

select * 
from 
    (SELECT TOP (100) PERCENT 
      dbo.Divisions.DivisionName, 
      dbo.employee.EmpOrgType, 
      dbo.employee.Name, 
      T1.Username, 
      courses_2.CourseName, 
      CASE WHEN dbo.employee_courses.courseId IS NULL THEN '' '' 
       ELSE ''Yes'' END AS CourseId 
    FROM dbo.employee_courses 
    RIGHT OUTER JOIN dbo.courses AS courses_2 
    INNER JOIN (SELECT employee_1.Username, 
         courses_1.CourseID 
       FROM dbo.employee AS employee_1 
       CROSS JOIN dbo.courses AS courses_1) 
            AS T1 ON courses_2.CourseID = T1.CourseID 
    INNER JOIN dbo.employee ON T1.Username = dbo.employee.Username 
          ON dbo.employee_courses.employeeId = T1.Username AND 
           dbo.employee_courses.courseId = T1.CourseID 
    ORDER BY T1.Username 
    ) DataTable 

このクエリは、従業員の情報を取得する必要があります。次に、講座のGroupNameに言及しながら講座のテーブルから講義を取り出した講座を表示する必要があります。

+2

エラーメッセージは何ですか? –

+0

@ user976711:このクエリは元のクエリの変更されたバージョンですか?もしそうなら、質問に元の質問を含めることができますか? –

答えて

1

あなたが実際にあなたの結果の文字列で単一引用符を見たいですか?はいの場合:

SELECT * 
FROM (SELECT TOP (100) PERCENT dbo.divisions.divisionname, 
          dbo.employee.emporgtype, 
          dbo.employee.name, 
          t1.username, 
          courses_2.coursename, 
          CASE 
           WHEN dbo.employee_courses.courseid IS NULL 
          THEN ''' ''' 
           ELSE '''Yes''' 
          END AS courseid 
    FROM dbo.employee_courses 
      RIGHT OUTER JOIN dbo.courses AS courses_2 
          INNER JOIN (SELECT employee_1.username, 
               courses_1.courseid 
             FROM dbo.employee AS employee_1 
               CROSS JOIN dbo.courses AS 
                  courses_1) 
             AS t1 
           ON courses_2.courseid = t1.courseid 
          INNER JOIN dbo.employee 
           ON t1.username = dbo.employee.username 
      ON dbo.employee_courses.employeeid = t1.username 
       AND dbo.employee_courses.courseid = t1.courseid 
    ORDER BY t1.username) datatable 
+0

また、http://msdn.microsoft.com/en-us/library/ms174393.aspxを参照してください。 – gangreen

+0

ありがとうございました。私はあなたのクエリを使用しましたが、それは私に結果を与えていません。上の質問では、StoredProcedureの中に挿入したクエリをコピーしました。しかし、始めに、私がこのストアドプロシージャに入れる前にこのクエリを開発したとき、それはうまくいっていましたが、今はそうではありません。私はこれが上記のデータベース構造の変更に関連していると思います。 – user976711

+0

私はあなたのSQLクエリを微調整し、今は正常に動作します。どうもありがとうございました。私は本当にあなたの助けに感謝します – user976711

1

時々、エラーが構文であることがわかります。時にはそれは私に "'とのエラーを伝えます。

問題はここにありそうです

CASE WHEN dbo.employee_courses.courseId IS NULL THEN '' '' ELSE ''Yes'' END AS CourseId 
+0

私は ""に変換され、それでも動作しました – user976711

関連する問題