2011-12-05 192 views
0

我正在開發一個web應用程序,現在我需要讓這個應用程序能夠從它的數據庫中生成一些報告。我有一個龐大的數據庫,結構相當複雜。我想出了一個大的SQL查詢,並且在我改變了一點數據庫結構之前,它和我一起工作得很好。我根據這些更改對其進行了修改,但仍然無效。我在SQLServer Management Studio中測試了它,但是失敗了。有時它告訴我,錯誤是語法。有時它告訴我,錯誤與''。這個SQL查詢有什麼問題?

數據庫的結構簡單:

職員表:名,用戶名,JOBTITLE,BadgeNo,EmpOrgType,DivisionID

部門表: DepartmentCode,DepartmentName的

課程表: CourseID,CourseName,GroupID

組表:的GroupID,組名

employee_courses: EMPLOYEEID,courseID

每個表中的第一屬性是每個表中的除了最後一個表中的主鍵,employee_courses表。

查詢是:

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 

該查詢應檢索員工的信息:姓名,用戶名,JOBTITLE,BadgeNo,EmpOrgType和DivisionName。然後,它應該顯示他從課程表中提取的課程,並提及所選課程的組名。

+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