行转列不要case when
时间: 2023-10-17 13:34:08 浏览: 110
你可以使用转置函数来实现行转列,而避免使用 CASE WHEN 语句。具体的转置函数可以根据你使用的数据库系统而有所不同,下面是一些常见数据库系统中的示例:
1. MySQL/MariaDB:
使用 GROUP_CONCAT 和 GROUP BY 语句可以将行转列。例如,假设有一个名为 `table_name` 的表,其中包含 `id`、`column_name` 和 `value` 列,你可以按照 `id` 进行分组并使用 GROUP_CONCAT 来将不同的 `column_name` 和 `value` 值连接起来,从而实现行转列。示例如下:
```sql
SELECT id, GROUP_CONCAT(column_name, '=', value) AS transposed_values
FROM table_name
GROUP BY id;
```
2. PostgreSQL:
在 PostgreSQL 中,可以使用 crosstab 函数来进行行转列。首先,确保已启用 tablefunc 扩展。然后,你可以使用 crosstab 函数并提供用于确定行和列的查询。以下是一个示例:
```sql
SELECT *
FROM crosstab(
'SELECT id, column_name, value
FROM table_name
ORDER BY 1, 2',
'SELECT DISTINCT column_name
FROM table_name
ORDER BY 1'
) AS ct (id integer, column1 text, column2 text, ...);
```
3. Oracle:
Oracle 提供了 PIVOT 操作符来实现行转列。你可以使用 PIVOT 操作符,并提供用于确定行和列的查询。以下是一个示例:
```sql
SELECT *
FROM (
SELECT id, column_name, value
FROM table_name
)
PIVOT (
MAX(value)
FOR column_name IN ('column1', 'column2', ...)
);
```
这些示例都是根据常见的数据库系统提供的功能来实现行转列的。具体的实现方式可能因数据库系统的版本和配置而有所不同,你可以根据自己的具体情况进行调整。
阅读全文