[英]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語句上使用SUM
或MAX
類的聚合函數
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.