簡體   English   中英

sql 中的 Group_Concat 多列

[英]Group_Concat multple columns in sql

我有兩張桌子。

第一個表稱為 Employee

  |EID| EName|  Salary |
=========================
  |1  |A     |300      |
  |2  |B     |400      | 
  |3  |O     |500      |

第二個表稱為 Employee_Sal_Changes

  |EID|  Salary_Change_History| year
=======================================
  |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

在我的前端桌子上,我想展示

 id   |Salary Change History    |
=================================
 A    | 100:2012                |
      | 200:2013                |
      | 300:2014                |
=================================
 B    | 200:2013                |
      | 400:2014                |
=================================
 O    | 100:2011                |
      | 200:2012                |
      | 300:2013                |
      | 400:2014                |
=================================

我想將salary_change_history 和year 匹配到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>值列表。 請注意,您不需要引入employee表來生成該結果集:另一個表包含所有必要的信息。

DB Fiddle 上的演示

在此處輸入圖像描述


如果您還想要員工姓名:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM