2015-09-01 63 views
1

我需要將查詢從Oracle SQL轉換爲Postgres。查詢從遊標返回單行元素。我會寫這個查詢的簡化形式甲骨文:PostgreSQL - 如何從一行中的遊標中選擇元素

select CONCAT_LIST(cursor(select first_name || '-' || last_name from sys_users) ,',') as users_list from dual 

如果表 「sys_users」 有2個元素:

1. first name - "John", last name - "Smith" 
2. first name - "George", last name - "Doe" , 

結果是:

John-Smith,George-Doe 

我需要在Postgres中得到相同的結果,如果這個表中的元素是相同的。

回答

2

聚集字符串,請使用string_agg()

select string_agg(first_name || '-' || last_name, ',') as users_list 
from sys_users; 

注意,如果first_namelast_name可以爲空,拼接的結果也將是空的(不像甲骨文)。要解決這個問題,使用concat()而不是簡單地把NULL作爲一個空字符串:

select string_agg(concat(first_name, '-', last_name), ',') as users_list 
from sys_users; 

甚至更​​好:使用concat_ws()將離開了'-'如果一個元素是NULL:

select string_agg(concat_ws('-', first_name, last_name), ',') as users_list 
from sys_users; 

Btw:你的Oracle查詢過於複雜,如果你用string_agg()替換爲listagg()

0,你基本上可以使用與第一個Postgres查詢相同的查詢
select listagg(firstname||'-'||lastname, ',') within group (order by lastname) 
from sys_users; 
相關問題