Group_Concat sql 中的多列
Group_Concat multple columns in sql
我有两个 table。
第一个table叫Employee
|EID|电子名|工资 |
=========================
|1 |A |300 |
|2 |B |400 |
|3 |O |500 |
第二个table被称为Employee_Sal_Changes
|EID| Salary_Change_History|年
=======================================
|1 |100 |2012
|1 |200 |2013
|1 |300 |2014
|2 |200 |2013
|2 |400 |2014
|3 |100 |2011
|3 |200 |2012
|3 |300 |2013
|3 |500 |2014
在我的前端table,我想展示
id |薪资变动历史|
=================================
一个| 100:2012 |
| 200:2013 |
| 300:2014 |
=================================
乙 | 200:2013 |
| 400:2014 |
=================================
欧 | 100:2011 |
| 200:2012 |
| 300:2013 |
| 400:2014 |
=================================
我想将 salary_change_history 和年份匹配到 EID 并使用循环在前端显示它们。
为了得到这些,我尝试使用 group_concat 将它们存储在一个数组中,但它只获取 EID = 1
的值
这是后台的查询
Select
(select Group_Concat(Employee_Sal_Changes.Salary_Change_History),(Group_Concat(Employee_Sal_Changes.year) from Employee_Sal_Changes left join Employee on Employee_Sal_Changes.EID = Employee.EID),
Employee.EName
From Employee_Sal_Changes
有更好的方法还是继续使用group_concat?
您可以使用聚合:
select
eid,
group_concat(
year, ':', salary_change_history
order by year
separator '\n'
) salary_change_history
from employee_sal_changes
group by eid
对于每个员工,这会生成一个由 <year>:<salary>
个值组成的列表,这些值由回车符 returns 分隔。请注意,您不需要引入 employee
table 来生成该结果集:另一个 table 具有所有必要的信息。
如果您还需要员工姓名:
select
s.eid,
e.ename,
group_concat(
s.year, ':', s.salary_change_history
order by s.year
separator '\n'
) salary_change_history
from employee_sal_changes s
inner join employee e on e.eid = s.eid
group by s.eid, e.ename
我有两个 table。
第一个table叫Employee
|EID|电子名|工资 | ========================= |1 |A |300 | |2 |B |400 | |3 |O |500 |
第二个table被称为Employee_Sal_Changes
|EID| Salary_Change_History|年 ======================================= |1 |100 |2012 |1 |200 |2013 |1 |300 |2014 |2 |200 |2013 |2 |400 |2014 |3 |100 |2011 |3 |200 |2012 |3 |300 |2013 |3 |500 |2014
在我的前端table,我想展示
id |薪资变动历史| ================================= 一个| 100:2012 | | 200:2013 | | 300:2014 | ================================= 乙 | 200:2013 | | 400:2014 | ================================= 欧 | 100:2011 | | 200:2012 | | 300:2013 | | 400:2014 | =================================
我想将 salary_change_history 和年份匹配到 EID 并使用循环在前端显示它们。
为了得到这些,我尝试使用 group_concat 将它们存储在一个数组中,但它只获取 EID = 1
的值这是后台的查询
Select
(select Group_Concat(Employee_Sal_Changes.Salary_Change_History),(Group_Concat(Employee_Sal_Changes.year) from Employee_Sal_Changes left join Employee on Employee_Sal_Changes.EID = Employee.EID),
Employee.EName
From Employee_Sal_Changes
有更好的方法还是继续使用group_concat?
您可以使用聚合:
select
eid,
group_concat(
year, ':', salary_change_history
order by year
separator '\n'
) salary_change_history
from employee_sal_changes
group by eid
对于每个员工,这会生成一个由 <year>:<salary>
个值组成的列表,这些值由回车符 returns 分隔。请注意,您不需要引入 employee
table 来生成该结果集:另一个 table 具有所有必要的信息。
如果您还需要员工姓名:
select
s.eid,
e.ename,
group_concat(
s.year, ':', s.salary_change_history
order by s.year
separator '\n'
) salary_change_history
from employee_sal_changes s
inner join employee e on e.eid = s.eid
group by s.eid, e.ename