case when 根據具體時間彙總員工每個月提成
阿新 • • 發佈:2021-02-05
前兩天IT群裡有人在問如何將員工的每個月的提成按月份彙總出來,時間是一個具體的時間點沒有具體月份。問題和效果如下:
1.員工_提成表:
2.彙總效果:
3.查詢語句如下:
SELECT `nickname`, sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 01 THEN `salary` ELSE 0 END ) AS '一月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 02 THEN `salary` ELSE 0 END ) AS '二月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 03 THEN `salary` ELSE 0 END ) AS '三月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 04 THEN `salary` ELSE 0 END ) AS '四月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 05 THEN `salary` ELSE 0 END ) AS '五月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 06 THEN `salary` ELSE 0 END ) AS '六月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 07 THEN `salary` ELSE 0 END ) AS '七月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 08 THEN `salary` ELSE 0 END ) AS '八月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 09 THEN `salary` ELSE 0 END ) AS '九月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 10 THEN `salary` ELSE 0 END ) AS '十月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 11 THEN `salary` ELSE 0 END ) AS '十一月', sum( CASE DATE_FORMAT(belong_at, '%m') WHEN 12 THEN `salary` ELSE 0 END ) AS '十二月' FROM ts_test_label GROUP BY `nickname`
4.建立員工_提成表:
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for ts_test_label -- ---------------------------- DROP TABLE IF EXISTS `ts_test_label`; CREATE TABLE `ts_test_label` ( `nickname` varchar(20) DEFAULT NULL COMMENT '暱稱', `salary` float(7,2) DEFAULT NULL COMMENT '提成', `belong_at` datetime DEFAULT NULL COMMENT '所屬時間' ) ENGINE=MyISAM DEFAULT CHARSET=utf8;
完畢!
更多問題請諮詢QQ:1076226823