Что не так с этим SQL-запросом? - PullRequest
0 голосов
/ 05 декабря 2011

Я занимаюсь разработкой веб-приложения, и теперь мне нужно, чтобы это приложение могло генерировать некоторые отчеты из своей базы данных.У меня огромная база данных с довольно сложной структурой.Я придумал большой SQL-запрос, и он работал нормально, пока я немного не изменил структуру базы данных.Я изменил его в соответствии с этими изменениями, но все равно он не работает.Я проверил это в SQLServer Management Studio и потерпел неудачу.Иногда это говорит мне, что ошибка с синтаксисом.Иногда мне сообщают, что ошибка с ''.

Простая структура базы данных:

Таблица сотрудников: Имя, Имя пользователя, JobTitle, BadgeNo, EmpOrgType, DivisionID

Таблица отделов: DepartmentCode, DepartmentName

таблица курсов: CourseID, CourseName, GroupID

таблица групп: GroupID, GroupName

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.Затем он должен отобразить курсы, которые он взял из таблицы курсов, с указанием GroupName этих пройденных курсов.

Ответы [ 2 ]

1 голос
/ 05 декабря 2011

Вы действительно хотите видеть одинарные кавычки в вашей строке результата? Если да, попробуйте:

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  
1 голос
/ 05 декабря 2011

Иногда мне говорят, что ошибка в синтаксисе. Иногда мне говорят, что ошибка с ''.

Проблема, скорее всего, здесь

CASE WHEN dbo.employee_courses.courseId IS NULL THEN '' '' ELSE ''Yes'' END AS CourseId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...