Выделите все строки в таблице, разделенные запятыми с условием - PullRequest
0 голосов
/ 08 апреля 2019

Клиент вводит заявку и выбирает отдел или, в некоторых случаях, несколько отделов из списка.Мое приложение возвращает отделы, разделенные запятыми для каждого идентификатора билета.Работает отлично.Тем не менее, пользователь мог выбрать «ВСЕ» отделы из выбора (DEPARTMENT_ID для выбора ВСЕ - «1»).Затем мне нужно будет вернуть все отделы в таблице отделов, разделенные запятыми.

Ticket Table
    TICKET_ID   |  ISSUE
-------------------------
       100      | Power Outage
       101      | Internet is not working

Таблица отделений:

 DEPARTMENT_ID | DEPARTMENT
 --------------------------
         1    | ALL
         2    | Accounting
         3    | Human Resources
         4    | Receiving

Таблица DepartmentTickets

DEPARTMENT_TICKETS_ID | TICKET_ID | DEPARTMENT_ID
----------------------------------------------------------
       1              |    100    |     2
       2              |    100    |     3
       3              |    101    |     1

Использование моегозапрос, билет 100 показывает следующие результаты: Отключение электропитания: бухгалтерия, управление персоналом Как оформить билет 101, показывает следующее: Интернет не работает: все, бухгалтерия, управление персоналом, получение

    Select ISSUE, 
    stuff((
    SELECT ', ' + cast(Departments.DEPARTMENT as varchar(max))
    FROM Departments
    left join DepartmentTickets
    ON DepartmentTicket.TICKET_ID = TICKETS.TICKET_ID
    WHERE DepartmentTickets.TICKET_ID = TICKETS.TICKET_ID and DepartmentTickets.DEPARTMENT_ID = Departments.DEPARTMENT_ID       
    FOR XML PATH('')
    ), 1, 2, '') AS DEPARTMENTS
    FROM TICKETS
    WHERE TICKET_ID = '100'
    ORDER BY ISSUE

1 Ответ

1 голос
/ 09 апреля 2019

Сначала сделайте свое внутреннее соединение в маскировке правильным внутренним соединением В предложении ON добавьте с OR проверку, чтобы идентификатор отдела был 1.

И, кстати, если идентификаторы являются целыми числами, а не строками, какими они кажутся, вы не должны заключать литералы в одинарные кавычки.

SELECT t.issue, 
       stuff((SELECT ', ' + cast(d.department AS varchar(max))
                     FROM departments d
                          INNER JOIN departmenttickets dt
                                     ON dt.department_id = d.department_id
                                         OR dt.department_id = 1
                     WHERE dt.ticket_id = t.ticket_id
                     FOR XML PATH('')),
             1,
             2,
             '') departments
       FROM tickets t
       WHERE t.ticket_id = 101
       ORDER BY t.issue;

дб <> скрипка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...