gpt4 book ai didi

mysql - 使用 CREATE VIEW 将列值拆分为多列

转载 作者:行者123 更新时间:2023-11-30 23:18:55 25 4
gpt4 key购买 nike

使用 MySQL 查询,我如何获取示例 A 中的表:

Example A
+------+---------------+----------+
| id | value | class |
+------+---------------+----------+
| 1 | 33.00 | total |
| 1 | 12.00 | shipping |
| 2 | 45.00 | total |
| 2 | 15.00 | shipping |
+------+---------------+----------+

然后创建一个类似示例 B 的 View ?

Example B
+------+---------------+---------------+
| id | value_total | value_shipping|
+------+---------------+---------------+
| 1 | 33.00 | 12.00 |
| 2 | 45.00 | 15.00 |
+------+---------------+---------------+

最佳答案

您可以简单地使用 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;

参见this SQLFiddle

如果您有未知数量的,那么试试这个动态查询

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;

输出:

╔════╦═════════════╦════════════════╗
║ ID ║ VALUE_TOTAL ║ VALUE_SHIPPING ║
╠════╬═════════════╬════════════════╣
║ 1 ║ 33 ║ 12 ║
║ 2 ║ 45 ║ 15 ║
╚════╩═════════════╩════════════════╝

参见this SQLFiddle

关于mysql - 使用 CREATE VIEW 将列值拆分为多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16397666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com