pgsql行转列 不使用Corsstab
时间: 2024-01-16 10:46:23 浏览: 86
sql 列转行
如果你不想使用crosstab函数来实现行转列的话,可以使用CASE WHEN语句来手动实现。下面是一个示例:
假设你有以下表格:
```
CREATE TABLE test (
id serial primary key,
name text,
category text,
value numeric
);
INSERT INTO test (name, category, value) VALUES ('John', 'A', 10);
INSERT INTO test (name, category, value) VALUES ('John', 'B', 20);
INSERT INTO test (name, category, value) VALUES ('John', 'C', 30);
INSERT INTO test (name, category, value) VALUES ('Jane', 'A', 15);
INSERT INTO test (name, category, value) VALUES ('Jane', 'B', 25);
INSERT INTO test (name, category, value) VALUES ('Jane', 'C', 35);
```
现在,你想要将它转换成行列如下:
```
name | category_a | category_b | category_c
-----+------------+------------+------------
John | 10 | 20 | 30
Jane | 15 | 25 | 35
```
你可以使用如下SELECT语句:
```
SELECT
name,
MAX(CASE WHEN category = 'A' THEN value ELSE 0 END) AS category_a,
MAX(CASE WHEN category = 'B' THEN value ELSE 0 END) AS category_b,
MAX(CASE WHEN category = 'C' THEN value ELSE 0 END) AS category_c
FROM test
GROUP BY name;
```
这个查询将根据每个人的姓名进行分组,并在每个类别(A、B、C)上执行CASE WHEN语句,然后使用MAX函数将它们转换为列。注意,这个查询假设每个人只有一行数据,如果有多行,它将只选择每个类别的最大值。
希望这可以帮助你实现行转列的功能。
阅读全文