-- 示例代码: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;
获取不同产品名称:使用 GROUP_CONCAT 和 DISTINCT 获取所有不同的产品名称,并将其转换为 SQL 查询的一部分。每个产品名称都会生成一个 CASE 语句,用于在后续查询中进行条件判断。
构建动态SQL查询语句:将上一步生成的 CASE 语句拼接成完整的 SQL 查询语句。这里我们假设每行数据都有一个唯一的 id,并且我们将根据 id 进行分组。
准备并执行动态SQL:使用 PREPARE 和 EXECUTE 语句来执行动态生成的 SQL 查询。最后使用 DEALLOCATE PREPARE 释放准备好的语句。
通过这种方式,可以实现从行到列的动态转换,适用于产品种类不确定的情况。
下一篇:mysql类型转换
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站