2014-11-11 3 views
0

Извините, если тема была не слишком четкой. Вот ссылка на мой пример sqlfiddle http://sqlfiddle.com/#!2/6806faСоздание вида со смежными значениями строк

Я пытаюсь, чтобы представление role_list содержало только 1 строку в хранилище. В основном, что должен содержать список ролей, - это первичный сотрудник отдела продаж, агента и менеджера. Итак, как вы можете видеть из примера sql-запроса, я побежал для простого выбора всех строк из списка ролей, у него есть отдельная строка для каждого типа сотрудника A-Mart (одна строка для первичного продавца, одна строка для агента и одна строка для менеджера) , Вместо этого я хотел просто вернуть 1 строку для A-Mart, а employee_id 100 для каждой позиции.

В частности, выходной результат я пытаюсь получить это:

store_id store_name salesperson agent manager 
----------|------------|-------------|-------|---------- 
1   |A-Mart  |100   |100 |100 
2   |B-Mart  |102   |  | 
3   |C-Mart  |103   |  |102 

Но вместо этого, я получаю:

store_id store_name salesperson agent manager 
----------|------------|-------------|-------|---------- 
1   |A-Mart  |100   |  | 
1   |A-Mart  |    |100 | 
1   |A-Mart  |    |  |100 
2   |B-Mart  |102   |  | 
3   |C-Mart  |    |  |102 
3   |C-Mart  |103   |  | 

Я также пытаюсь придерживаться только с помощью объединений вместо отдельных операторов выбора подзапроса.

ответ

1

Вы пытаетесь сделать PIVOT, который может быть достигнут с помощью CASE, MAX и GROUP BY в mysql.

SELECT 
    s.store_id, 
    s.store_name, 
    MAX(CASE WHEN r.role_char ='S' THEN emp.employee_id ELSE '' END)AS salesperson, 
    MAX(CASE WHEN r.role_char ='A' THEN emp.employee_id ELSE '' END) AS agent, 
    MAX(CASE WHEN r.role_char ='M' THEN emp.employee_id ELSE '' END) AS manager 
FROM 
    store s 
    LEFT JOIN store_role sr ON sr.store_id=s.store_id AND sr.primary_f=1 
    LEFT JOIN role r ON sr.role_id=r.role_id AND sr.store_id=r.store_id 
    LEFT JOIN employee emp ON emp.employee_id = sr.employee_id 
GROUP BY s.store_id, s.store_name 
Смежные вопросы