簡體   English   中英

將mysql行轉換為帶有數據的自定義列

[英]Transposing mysql rows into customized column with data

我在mysql中有下表

emp_id          month           salary
1               Jan             2000
1               Feb             2000
1               March           2000
2               Jan             3000
2               Feb             3000
2               March           3000

我正在嘗試獲得如下結果:

emp_id   Jan_sal    feb_sal     Mar_sal
1           2000    2000        2000
2           3000    3000        3000

我的查詢:

select emp_id,
(case when month = 'Jan' then salary else NUll end ) jan_sal,
(case when month = 'Feb' then salary else NUll end ) feb_sal,
(case when month = 'March' then salary else NUll end ) march_sal
from emp group by emp_id;

但是我得到的輸出為:

emp_id jan_sal  feb_sal march_sal
1      2000     NULL    NULL
2      3000     NULL    NULL

不知道我的查詢是否正確。 任何幫助表示贊賞。

您想在case語句上使用SUMMAX類的聚合函數

select emp_id,
sum(case when month = 'Jan' then salary else NUll end ) jan_sal,
sum(case when month = 'Feb' then salary else NUll end ) feb_sal,
sum(case when month = 'March' then salary else NUll end ) march_sal
from emp
group by emp_id;

如果同一位員工有多個薪水(可能是其他福利等),那么您必須決定是要添加所有薪水還是僅取最大值,並根據此值使用SUM或MAX。

使用MAX()函數進行旋轉:

SELECT emp_id,
       MAX(CASE WHEN month = 'Jan'   THEN salary END) AS jan_sal,
       MAX(CASE WHEN month = 'Feb'   THEN salary END) AS feb_sal,
       MAX(CASE WHEN month = 'March' THEN salary END) AS march_sal
FROM emp
GROUP BY emp_id;

假設每個員工每月只有一個薪水條目。 如果可能有多個條目,則use應該將原始CASE表達式與SUM()而不是MAX()

暫無
暫無

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

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