如果主题不太清楚,请抱歉。这是我的sqlfiddle示例的链接 http://sqlfiddle.com/#!2/6806fa
我试图让role_list视图每个商店只包含1行。基本上,role_list应包含的是主要销售人员,代理人和经理员工。因此,从示例sql查询中我可以看到,我只是从role_list中选择所有行,它为每个A-Mart员工类型分别有一行(主要销售人员为一行,代理人为一行,经理人为一行) 。相反,我希望它只为A-Mart返回1行,每个职位的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 | |
我也试图坚持只使用连接而不是单独的子查询选择语句。
答案 0 :(得分:1)
您正在尝试进行PIVOT,可以使用mysql中的CASE
,MAX
和GROUP BY
来实现。
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