-- 示例代码:MySQL 纵表转横表
-- 假设我们有一个纵表 `sales`,结构如下:
-- | id | product | sales_amount |
-- |----|---------|--------------|
-- | 1 | A | 100 |
-- | 2 | B | 200 |
-- | 3 | A | 150 |
-- | 4 | C | 300 |
-- | 5 | B | 250 |
-- 我们希望将其转换为横表,结果如下:
-- | product_A | product_B | product_C |
-- |-----------|-----------|-----------|
-- | 250 | 450 | 300 |
-- 使用 CASE WHEN 进行纵表转横表
SELECT
SUM(CASE WHEN product = 'A' THEN sales_amount ELSE 0 END) AS product_A,
SUM(CASE WHEN product = 'B' THEN sales_amount ELSE 0 END) AS product_B,
SUM(CASE WHEN product = 'C' THEN sales_amount ELSE 0 END) AS product_C
FROM sales;
-- 如果产品种类不确定或非常多,可以使用动态SQL来生成查询语句
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN product = ''',
product,
''' THEN sales_amount ELSE 0 END) AS `',
product, '`'
)
) INTO @sql
FROM sales;
SET @sql = CONCAT('SELECT ', @sql, ' FROM sales');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
这段代码展示了如何在 MySQL 中将纵表转换为横表。首先通过 CASE WHEN 语句实现静态的纵表转横表,然后通过动态 SQL 实现更灵活的转换,适用于产品种类较多的情况。
上一篇:mysql类型转换
下一篇:如何重启mysql
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站