gpt4 book ai didi

mysql - 使用合并的行值创建 View

转载 作者:行者123 更新时间:2023-11-29 12:35:19 25 4
gpt4 key购买 nike

抱歉,如果主题不太清楚。这是我的 sqlfiddle 示例的链接 http://sqlfiddle.com/#!2/6806fa

我试图让 role_list View 每个商店仅包含 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 | |

我还尝试坚持只使用联接而不是单独的子查询选择语句。

最佳答案

您正在尝试进行PIVOT,这可以使用mysql中的CASEMAXGROUP 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

关于mysql - 使用合并的行值创建 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com