pg 行转列
时间: 2023-07-25 10:22:43 浏览: 66
在 PostgreSQL 中,可以使用 `crosstab` 函数将行转换为列。但是,要使用 `crosstab` 函数,首先需要安装 `tablefunc` 扩展。
以下是一个示例查询,将 `mytable` 表中的 `category` 值作为列,并将 `value` 值作为行:
```sql
CREATE EXTENSION IF NOT EXISTS tablefunc;
SELECT *
FROM crosstab(
'SELECT id, category, value
FROM mytable
ORDER BY 1',
'SELECT DISTINCT category FROM mytable ORDER BY 1'
) AS ct(id int, category1 int, category2 int, category3 int);
```
这将返回一个表格,其中每个唯一的 `category` 值都是一个列。如果 `mytable` 中有 3 个不同的 `category` 值,那么结果将具有 4 列(`id` 和 3 个 `category` 值)。每行的值将根据 `id` 和 `category` 值从 `value` 列中提取。
请注意,`crosstab` 函数的第二个参数是用于确定唯一 `category` 值的子查询,因此必须在查询中指定这些值。
相关问题
pg 里面行转列
在 PostgreSQL 中,可以使用 crosstab 函数将行转换为列。crosstab 函数是 partman 扩展的一部分,需要安装该扩展才能使用。该函数需要三个参数:第一个参数是 SQL 查询语句,用于获取需要转换的数据;第二个参数是 crosstab 的行定义,用于指定需要转换的行;第三个参数是 crosstab 的列定义,用于指定需要转换的列。示例如下:
```
SELECT *
FROM crosstab(
'SELECT year, quarter, total_sales
FROM sales
ORDER BY 1,2',
'SELECT DISTINCT quarter FROM sales ORDER BY 1',
'SELECT DISTINCT year FROM sales ORDER BY 1'
) AS ct(year integer, q1 integer, q2 integer, q3 integer, q4 integer);
```
在上面的示例中,我们使用了一个 sales 表,并将其按照年份和季度进行排序。然后,我们使用 crosstab 函数将行转换为列,将季度作为行定义,将年份作为列定义,并将销售额作为需要转换的数据。函数返回一个结果集,其中包含了每个年份与季度对应的销售额。
pg数据库如何实现行转列
在 PostgreSQL 中,可以使用 crosstab 函数实现行转列操作。crosstab 函数是由 tablefunc 模块提供的一个扩展函数,需要先安装该模块才能使用。
以下是一个示例:
假设有一个表格包含以下数据:
```
id | name | type | value
---+------+------|------
1 | foo | A | 10
2 | bar | A | 20
3 | baz | B | 30
4 | qux | B | 40
```
要将 type 列转换为列头,value 列转换为对应的值,可以使用以下 SQL:
```sql
SELECT *
FROM crosstab(
'SELECT name, type, value FROM my_table ORDER BY 1, 2',
'SELECT DISTINCT type FROM my_table ORDER BY 1'
) AS ct(name text, A numeric, B numeric);
```
执行后,将得到以下结果:
```
name | A | B
-----+-----+-----
bar | 20 |
baz | | 30
foo | 10 |
qux | | 40
```
其中,name 列为原表格中的 name 列,A 和 B 列为 type 列的取值,对应的值为 value 列的值。如果某个单元格没有对应的值,则为 NULL。