7

いくつかの SQL Server 2008R2 クエリを Postgresql 9.0 に移行していますが、問題があります。SQL Server クエリは次のとおりです。

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

SQL Server のドキュメントを読むと、カンマ区切りのリストが作成されることを理解しています。Postresql' でstuff関数を関数に変更できると思います。overlay私は正しいですか?

for xml path2 番目の問題は、パラメータとして ('') を使用する SQL Server で発生します。pNAMEScreate row要素の代わりに呼び出された属性に割り当てられた値を返します。あれは正しいですか?

属性を持つPostgresqlQuery_to_xml()関数tableforest = 'true'は同じことをしますか?

ありがとうございました。

4

3 に答える 3

24

代わりに使用できますstring_agg

SQLフィドル

PostgreSQL 9.1.6スキーマのセットアップ

create table T
(
  Name varchar(10)
);

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

クエリ1

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

結果

|             NAMES |
---------------------
| Kalle,Pelle,Urban |
于 2013-01-02T09:56:37.500 に答える
-1

XML PATH を指定した STUFF() STUFF

を記録する同じテーブル

SELECT distinct C.country, X.ProductList FROM     
tbl_demo as C     
CROSS APPLY    
(    
SELECT STUFF    
      (    
          (    
              SELECT 
                    distinct 
                        ',' + P.product 
                    FROM 
                        tbl_demo AS P    
                    JOIN 
                        tbl_demo AS CP 
                    ON 
                        P.country = CP.country     
                    WHERE 
                        CP.sub_id = C.sub_id    
                    FOR XML PATH('')    
          )    
              
      ,1,1,'') as ProductList    
) as X
于 2021-01-21T04:24:20.950 に答える