Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

mysql 动态行转列

作者:◇∞柰旳ゝ僦湜沵   发布日期:2026-07-06   浏览:93

-- 示例代码:MySQL 动态行转列

-- 假设我们有一个名为 `sales` 的表,结构如下:
-- | id | product | sales_amount |
-- |----|---------|--------------|
-- | 1  | A       | 100          |
-- | 2  | B       | 200          |
-- | 3  | A       | 150          |
-- | 4  | C       | 300          |

-- 我们希望将产品名称作为列名,销售金额作为值进行展示。

-- 步骤1:获取所有不同的产品名称
SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(CASE WHEN product = ''',
      product,
      ''' THEN sales_amount END) AS `',
      product, '`'
    )
  ) INTO @sql
FROM sales;

-- 步骤2:构建动态SQL查询语句
SET @sql = CONCAT('SELECT id, ', @sql, ' FROM sales GROUP BY id');

-- 步骤3:准备并执行动态SQL
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

解释说明:

  1. 获取不同产品名称:使用 GROUP_CONCATDISTINCT 获取所有不同的产品名称,并将其转换为 SQL 查询的一部分。每个产品名称都会生成一个 CASE 语句,用于在后续查询中进行条件判断。

  2. 构建动态SQL查询语句:将上一步生成的 CASE 语句拼接成完整的 SQL 查询语句。这里我们假设每行数据都有一个唯一的 id,并且我们将根据 id 进行分组。

  3. 准备并执行动态SQL:使用 PREPAREEXECUTE 语句来执行动态生成的 SQL 查询。最后使用 DEALLOCATE PREPARE 释放准备好的语句。

通过这种方式,可以实现从行到列的动态转换,适用于产品种类不确定的情况。

上一篇:mysql full join用法

下一篇:mysql类型转换

大家都在看

mysql二级索引

mysqlavg函数保留小数

mysql显示表内容

mysql收集表统计信息

mysql经纬度距离计算

mysql 加密

mysql大小写转换函数

存储过程mysql

mysql 1265

mysql with语句

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站