如何在mysql中通过避免空值将行数据转换为列数据
我的桌子像:如何在mysql中通过避免空值将行数据转换为列数据,mysql,Mysql,我的桌子像: emp_number | leave_status | leave_length_days | leave_type_id | +------------+--------------+-------------------+---------------+ | 775 | 3 | 1.00 | 001 | | 775 | 1 | 1.0
emp_number | leave_status | leave_length_days | leave_type_id |
+------------+--------------+-------------------+---------------+
| 775 | 3 | 1.00 | 001 |
| 775 | 1 | 1.00 | 001 |
| 775 | 1 | 1.00 | 001 |
| 775 | 3 | 1.00 | 001 |
| 775 | 3 | 0.50 | 001 |
| 775 | 1 | 1.00 | 001 |
| 775 | 1 | 1.00 | 001 |
| 775 | 2 | 1.00 | 001 |
| 775 | 11 | 1.00 | 001 |
| 775 | 11 | 1.00 | 001 |
| 775 | 2 | 1.00 | 001 |
| 775 | 2 | 1.00 | 001 |
| 776 | 1 | 1.00 | 001 |
| 776 | 1 | 1.00 | 001 |
| 776 | 4 | 0.00 | 001 |
| 776 | 4 | 0.00 | 001 |
| 776 | 1 | 1.00 | 001 |
| 776 | 1 | 1.00 | 001
我想要像这样的输出:
+------------+---------------+---------+----------+
| emp_number | leave_type_id | pending | approved |
+------------+---------------+---------+----------+
| 775 | 001 | 4.00 | 8.00 |
| 776 | 001 | 4.00 | NULL |
+------------+---------------+---------+----------+
| emp_number | leave_type_id | pending | approved |
+------------+---------------+---------+----------+
| 775 | 001 | 4.00 | NULL |
| 775 | 001 | NULL | 8.00 |
| 775 | 001 | NULL | NULL |
| 775 | 001 | NULL | NULL |
| 776 | 001 | 4.00 | NULL |
| 776 | 001 | NULL | NULL |
+------------+---------------+---------+----------+
我尝试了以下问题:
select emp_number
, leave_type_id
, (CASE WHEN leave_status=1 THEN sum(leave_length_days) END) pending
, (CASE WHEN leave_status=2 THEN sum(leave_length_days) END) approved
from em_leave
where emp_number in (775,776)
group
by emp_number
, leave_status
, leave_type_id;
但它给了我这样的输出:
+------------+---------------+---------+----------+
| emp_number | leave_type_id | pending | approved |
+------------+---------------+---------+----------+
| 775 | 001 | 4.00 | 8.00 |
| 776 | 001 | 4.00 | NULL |
+------------+---------------+---------+----------+
| emp_number | leave_type_id | pending | approved |
+------------+---------------+---------+----------+
| 775 | 001 | 4.00 | NULL |
| 775 | 001 | NULL | 8.00 |
| 775 | 001 | NULL | NULL |
| 775 | 001 | NULL | NULL |
| 776 | 001 | 4.00 | NULL |
| 776 | 001 | NULL | NULL |
+------------+---------------+---------+----------+
我不想要空值。请在这方面帮助我。删除组中的休假状态,方法是,将汇总放在案例表达式的旁边:
我假设您使用的是MySQL,因为它是唯一一个允许使用这种SHT的DBMS