我是Postgres的初学者,需要做这样的事情。 我的Postgres查询输出有2列。我需要将这两者结合起来,如下所示。
第1栏:
A
B
C
第2栏:
D
D
D
输出栏:
A
B
C
D
(第1列的所有值和第2列的不同值)
这在PostgreSQL中是否可行?
答案 0 :(得分:4)
嗨,有一种奇特的方式:
select distinct unnest(array[
column1
, column2
])
from table
答案 1 :(得分:0)
你需要这样的东西:
select col from (
select Column1 as col from <your table >
union all
select distinct Column2 as col from <your table>
) as myview order by col
答案 2 :(得分:0)
将原始查询放入公用表表达式,然后汇总每列的不同值:
with data (fromzoneid, fromzoneid2) as (
... your complete original query goes here ...
)
select string_agg(distinct c1, '') as zoneid
from (
select t1.c1
from data
cross join regexp_split_to_table(fromzoneid, '') as t1 (c1)
union
select t2.c1
from data
cross join regexp_split_to_table(fromzoneid2, '') as t2 (c1)
) t;
以上假设您的查询只返回一行。我的解决方案将汇总查询返回的所有行的值!如果查询返回的行多于行,则所有行的唯一字符将合并为一列和单行!
如果您不想这样,您需要在查询中添加一个可用于按语句分组的列
类似的东西:
with data (id, fromzoneid, fromzoneid2) as (
... your complete original query goes here ...
)
select id, string_agg(distinct c1, '') as zoneid
from (
select data.id, t1.c1
from data
cross join regexp_split_to_table(fromzoneid, '') as t1 (c1)
union
select data.id, t2.c1
from data
cross join regexp_split_to_table(fromzoneid2, '') as t2 (c1)
) t
group by id
答案 3 :(得分:0)
我遇到了同样的问题。我有3个列并希望将行组合成一个并且不需要重复的值。因为我在第一步中通过col1 || '#' || col2 || '#' || col3
合并了它们。然后我使用string_to_array
函数将字符串拆分为数组,以便在最后一步使用unnest
。毕竟我可以使用DISTINCT
覆盖我的结果。
SELECT DISTINCT unnest(string_to_array(col1 || '#' || col2 || '#' || col3, '#')) FROM my_table;