[英]Split column values into multiple columns with CREATE VIEW
With a MySQL query, how can I take a table like in Example A: 使用MySQL查询,如何像示例A那样获取表:
Example A
+------+---------------+----------+
| id | value | class |
+------+---------------+----------+
| 1 | 33.00 | total |
| 1 | 12.00 | shipping |
| 2 | 45.00 | total |
| 2 | 15.00 | shipping |
+------+---------------+----------+
And create a view like Example B? 并创建类似于示例B的视图?
Example B
+------+---------------+---------------+
| id | value_total | value_shipping|
+------+---------------+---------------+
| 1 | 33.00 | 12.00 |
| 2 | 45.00 | 15.00 |
+------+---------------+---------------+
You can simply use SUM()
function for that: 您可以简单地使用
SUM()
函数:
SELECT id
,SUM(CASE WHEN class = 'total' THEN value ELSE 0 END) AS value_total
,SUM(CASE WHEN class = 'shipping' THEN value ELSE 0 END) AS value_shipping
FROM Table1
GROUP BY id;
If you have unknown number of class then try this Dynamic query 如果您的班级数目未知,请尝试此动态查询
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(case when class = ''',
class,
''' then value else 0 end) AS `value_',
class, '`'
)
) INTO @sql
FROM Table1;
SET @sql = CONCAT('SELECT id, ', @sql, '
FROM Table1
GROUP BY id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Output: 输出:
╔════╦═════════════╦════════════════╗
║ ID ║ VALUE_TOTAL ║ VALUE_SHIPPING ║
╠════╬═════════════╬════════════════╣
║ 1 ║ 33 ║ 12 ║
║ 2 ║ 45 ║ 15 ║
╚════╩═════════════╩════════════════╝
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.