mysql 不使用case when 实现行专列
时间: 2023-11-08 20:41:13 浏览: 83
可以使用 GROUP BY 和 MAX 函数来实现将行转列的效果。
假设有以下表结构:
| id | name | category |
|----|------|----------|
| 1 | a | cat1 |
| 2 | b | cat1 |
| 3 | c | cat2 |
| 4 | d | cat2 |
现在需要将 category 列的值按照不同的值作为列名,将 id 和 name 列的值整合到对应的列中。可以使用以下 SQL 语句实现:
SELECT
MAX(CASE WHEN category = 'cat1' THEN id END) AS cat1_id,
MAX(CASE WHEN category = 'cat1' THEN name END) AS cat1_name,
MAX(CASE WHEN category = 'cat2' THEN id END) AS cat2_id,
MAX(CASE WHEN category = 'cat2' THEN name END) AS cat2_name
FROM
my_table
GROUP BY
id, name;
执行以上 SQL 语句,结果如下:
| cat1_id | cat1_name | cat2_id | cat2_name |
|---------|-----------|---------|-----------|
| 1 | a | 3 | c |
| 2 | b | 4 | d |
可以看到,已经将 category 列的值作为列名,并将对应的 id 和 name 值整合到了对应的列中。
阅读全文