mysql 根据某一列的值 进行行转列 但是我不知道这列里都有什么 不能使用case when
时间: 2024-02-17 11:00:32 浏览: 122
如果你不知道要根据哪些值进行行转列,可以使用动态 SQL 来生成查询语句。下面是一个示例,将订单表中的订单项转换为列,并且根据订单项状态进行筛选:
```
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'MAX(IF(item_number = ''',
item_number,
''', product_name, NULL)) AS item_',
item_number,
'_name,',
'MAX(IF(item_number = ''',
item_number,
''', quantity, NULL)) AS item_',
item_number,
'_quantity'
)
) INTO @sql
FROM
order_items
WHERE
status = '已发货';
SET @sql = CONCAT('SELECT order_id, ', @sql, '
FROM order_items
WHERE status = ''已发货''
GROUP BY order_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
```
这将生成一个查询语句,将订单表中的订单项转换为列,并且只转换状态为“已发货”的数据。查询语句中的动态 SQL 中使用了 GROUP_CONCAT 函数和 CONCAT 函数,将每个订单项的名称和数量作为列进行展示。最后,使用 PREPARE 和 EXECUTE 语句执行动态 SQL。
阅读全文