[英]Query rows as columns ( MySQL)
My table structure: 我的表结构:
cust_id | action | action_count
--------+----------+-------------
1 | Approved | 15
2 | Approved | 25
1 | Rejected | 6
2 | Pending | 20
2 | Rejected | 7
I have to get the query result as: 我必须得到查询结果:
cust_id | Approved | Pending | Rejected
--------+----------+---------+---------
1 | 15 | 0 | 6
2 | 25 | 20 | 7
Try this query 试试这个查询
select
cust_id,
max(if(action='Approved', action_count, 0)) as Approved,
max(if(action='Rejected', action_count, 0)) as Rejected,
max(if(action='Pending', action_count, 0)) as Pending
from
tbl
group by
cust_id
| CUST_ID | APPROVED | REJECTED | PENDING |
-------------------------------------------
| 1 | 15 | 6 | 0 |
| 2 | 25 | 7 | 20 |
Here's a static query if the number of action
is known. 如果已知
action
数,则这是静态查询。
SELECT cust_id,
COALESCE(MAX(CASE WHEN action = 'Approved' THEN action_Count END), 0) Approved,
COALESCE(MAX(CASE WHEN action = 'Pending ' THEN action_Count END), 0) Pending ,
COALESCE(MAX(CASE WHEN action = 'Rejected' THEN action_Count END), 0) Rejected
FROM TableName
GROUP BY cust_id
But if the number of value of action
is unknown, a dynamic sql is much more preferred. 但是如果
action
值的数量未知,则更优选动态sql。
SELECT GROUP_CONCAT(DISTINCT
CONCAT('COALESCE(MAX(CASE WHEN action = ''',
action,
''' THEN action_Count END), 0) AS ',
CONCAT('`', action, '`')
)) INTO @sql
FROM TableName;
SET @sql = CONCAT('SELECT cust_id, ', @sql, '
FROM TableName
GROUP BY cust_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.