[英]How do I create long table from a wide table using union in PostgreSQL?
我有一个宽 PostgreSQL 表,我需要使用联合查询将其更改为长表。 表格是这样的:
访问日期 | outfalls_free | outfall_obstruction_comment | outfall_obstruction_remedy | 泻湖班轮 | lagoon_liner_comment | lagoon_liner_remedy |
---|---|---|---|---|---|---|
9/1/2022 | 经过 | 行 | 不是 | 需要 | 经过 | 行 |
9/30/2022 | 经过 | 行 | 没有必要 | 北美 | 修复后的护堤似乎无法支撑 | 修补 |
10/5/2022 | 经过 | 行 | 没有必要 | 失败 | 两个损坏区域 | 修补 |
10/14/2022 | 经过 | 行 | 没有必要 | 故障网元 | 泻湖撕裂 | 修补 |
2022 年 10 月 25 日 | 经过 | 行 | 没有必要 | 北美 | 没有观察到新的中断 | 没有必要 |
11/11/2022 | 经过 | 行 | 没有必要 | 经过 | 行 | 没有必要 |
10/19/2022 | 经过 | 行 | 没有必要 | 经过 | 行 | 没有必要 |
11/14/2022 | 经过 | 行 | 没有必要 | 经过 | 行 | 没有必要 |
11/20/2022 | 经过 | 行 | 没有必要 | 经过 | 行 | 没有必要 |
11/28/2022 | 经过 | 行 | 没有必要 | 经过 | 行 | 没有必要 |
12/15/2022 | 经过 | 行 | 没有必要 | 经过 | 行 | 没有必要 |
我想创建一个联合查询以从上面的表格创建下面的表格。
类别 | 日期 | 类型 | 状态 | 评论 | 补救 |
---|---|---|---|---|---|
排放口 | 9/1/2022 | 梗阻 | 经过 | 行 | 没有必要 |
泻湖 | 9/1/2022 | 衬垫 | 经过 | 行 | 没有必要 |
排放口 | 9/30/2022 | 梗阻 | 经过 | 行 | 没有必要 |
泻湖 | 9/30/2022 | 衬垫 | 北美 | 修复后的护堤似乎无法支撑 | 修补 |
排放口 | 10/5/2022 | 梗阻 | 经过 | 行 | 没有必要 |
泻湖 | 10/5/2022 | 衬垫 | 失败 | 两个损坏区域 | 修补 |
排放口 | 10/14/2022 | 梗阻 | 经过 | 行 | 没有必要 |
泻湖 | 10/14/2022 | 衬垫 | 失败 | NE泻湖撕裂 | 修补 |
排放口 | 2022 年 10 月 25 日 | 梗阻 | 经过 | 行 | 没有必要 |
泻湖 | 2022 年 10 月 25 日 | 衬垫 | 北美 | 没有观察到新的中断 | 没有必要 |
排放口 | 11/11/2022 | 梗阻 | 经过 | 行 | 没有必要 |
泻湖 | 11/11/2022 | 衬垫 | 经过 | 行 | 没有必要 |
排放口 | 10/19/2022 | 梗阻 | 经过 | 行 | 没有必要 |
泻湖 | 10/19/2022 | 衬垫 | 经过 | 行 | 没有必要 |
排放口 | 11/14/2022 | 衬垫 | 经过 | 行 | 没有必要 |
泻湖 | 11/14/2022 | 衬垫 | 经过 | 行 | 没有必要 |
排放口 | 11/20/2022 | 衬垫 | 经过 | 行 | 没有必要 |
泻湖 | 11/20/2022 | 衬垫 | 经过 | 行 | 没有必要 |
排放口 | 11/28/2022 | 衬垫 | 经过 | 行 | 没有必要 |
泻湖 | 11/28/2022 | 衬垫 | 经过 | 行 | 没有必要 |
排放口 | 12/15/2022 | 衬垫 | 经过 | 行 | 没有必要 |
泻湖 | 12/15/2022 | 衬垫 | 经过 | 行 | 没有必要 |
到目前为止,我可以通过以下方式将两列合二为一(例如 Status):
select "outfalls_free" as Status from public."Weekly Inspections"
union all
select "lagoon_liner" as Status from public."Weekly Inspections";
我如何实现第二个表? 我认为必须有一种比像上面那样组合多个查询更好的方法。 我是新的 SQL 和 PostgreSQL。 非常感谢任何帮助。
将列转换为行的一种简单方法是创建一个包含需要转换的列的数组,然后取消嵌套以创建行,例如
CREATE TABLE t (id int, a text, b text, c text);
INSERT INTO t VALUES (1,'a1','b1','c1'), (2,'a2','b2','c2');
SELECT id, unnest(array[a,b,c]) FROM t;
id | unnest
----+--------
1 | a1
1 | b1
1 | c1
2 | a2
2 | b2
2 | c2
(6 rows)
演示: db<>fiddle
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.