2013-01-02 13 views
5

Migruję niektóre zapytania SQL Server 2008R2 do Postgresql 9.0 i mam z tym problem. Oto zapytanie SQL Server:"stuff" i "dla ścieżki xml" ("')" z SQL Server w Postgresql

stuff((select ', '+p.[NAME] as 'data()' 
from BPROVIDERS_PROVIDER p, BORDER_ARTICLEORDERPROVIDER aop 
where p.OID = aop.PROVIDER for xml path('')),1,1,'')) as pNAMES 

Reading SQL Server dokumentacja Rozumiem, że ten tworzy listę oddzielonych przecinkami. Myślę, że mogę zmienić funkcję stuff na overlay w Postresql '. Mam rację?

Drugi problem dotyczy serwera SQL Server for xml path z ("') jako parametrem. Zwraca wartości przypisane do atrybutu o nazwie pNAMES zamiast tworzyć elementy wiersza. Czy to jest poprawne?

Czy funkcja Postgresql Query_to_xml() ma atrybut tableforest = 'true' zrobić to samo?

Dziękuję.

Odpowiedz

19

Zamiast tego można użyć string_agg.

SQL Fiddle

PostgreSQL 9.1.6 Schemat instalacji:

create table T 
(
    Name varchar(10) 
); 

insert into T values('Kalle'); 
insert into T values('Pelle'); 
insert into T values('Urban'); 

Zapytanie 1:

select string_agg(Name, ',') as Names 
from T 

Results:

|    NAMES | 
--------------------- 
| Kalle,Pelle,Urban | 
+0

Dzięki za odpowiedź, co z "dla ścieżki xml" i "query_to_xml"? – user1891262

+2

@ user1891262 - Nie potrzebujesz tego dla zapytania, które masz. 'string_agg' w PostgreSQL robi to, co' dla ścieżki xml' zrobiło dla ciebie w SQL Server. –