postgresql行转列、列转行
warning:
这篇文章距离上次修改已过448天,其中的内容可能已经有所变动。
在PostgreSQL中,行转列通常使用crosstab函数,该函数需要安装tablefunc模块。列转行通常使用UNION ALL或者JOIN操作。
以下是一个简单的例子:
- 行转列(使用
crosstab)
假设有一个sales表:
CREATE TABLE sales (
year int,
product text,
amount numeric
);
INSERT INTO sales (year, product, amount) VALUES
(2020, 'A', 100),
(2020, 'B', 200),
(2021, 'A', 150),
(2021, 'B', 250);要将sales表按年份转为列,可以使用crosstab:
CREATE EXTENSION IF NOT EXISTS tablefunc;
SELECT *
FROM crosstab(
'SELECT year, product, amount
FROM sales
ORDER 1,2'
) AS final_result(year int, product_a numeric, product_b numeric);- 列转行(使用
UNION ALL)
如果有一个年份和两个产品的列,想将其转回行格式:
CREATE TABLE yearly_sales (
year int,
product_a numeric,
product_b numeric
);
INSERT INTO yearly_sales (year, product_a, product_b) VALUES
(2020, 100, 200),
(2021, 150, 250);
SELECT year, 'A' AS product, product_a AS amount
FROM yearly_sales
UNION ALL
SELECT year, 'B', product_b
FROM yearly_sales
ORDER BY year, product;这里使用UNION ALL将每个产品的列再转回行格式。
评论已关闭