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

标签 mysql sql create-view

使用 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/

相关文章:

php - MySQL 连接两个表,其中来自 PHP 变量的 WHERE 语句已经存在

mysql - where 不存在条件语法

mysql - 在 MySQL 中,使用 @vars 时 VIEW 与 TABLE 的结果不同

mysql - 使用 EXIST 命令创建 sql View 语句

php - 当我在数据库中插入数据时,我在所有列中得到 num1

php - paypal验证后不发送电子邮件

mysql - 扩展MySQL double 据类型的精度?

sql - 查询在加入之前应用 Where 子句?

SQL Server 聚合性能