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 文档我知道这会创建一个逗号分隔的列表。我认为我可以将stuff函数更改为overlay在 Postresql 中运行。我对么?

第二个问题来自带有for xml path('') 作为参数的 SQL Server。它返回分配给名为pNAMES而不是创建行元素的属性的值。那是对的吗?

Query_to_xml()具有属性的Postgresql 函数是否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 回答
0

STUFF((SELECT DISTINCT ', ' + CONVERT(VARCHAR,L.ROLE_SUB_CAT_ID) FROM [PHS].[dbo].PHS_ADMIN_USER_ACCESS_DTL K, [PHS].[dbo].[PHS_ADMIN_USER_ROLE_SUB_CAT_MST] L 其中 L.ROLE_SUB_CAT_ID = K.ROLE_SUB_CAT_ID 和K.UMC_ID = A.UMC_ID AND K.CCR_ID = A.CCR_ID FOR XML PATH('')), 1, 1, '') AS ROLE_SUB_CAT_ID

像这样将其转换为 postgresql:

string_agg((SELECT distinct ', ' || cas​​t(L.ROLE_SUB_CAT_ID as VARCHAR) FROM PHS.dbo.PHS_ADMIN_USER_ACCESS_DTL K, PHS.dbo.PHS_ADMIN_USER_ROLE_SUB_CAT_MST L WHERE L.ROLE_SUB_CAT_ID = K.ROLE_SUB_CAT_ID AND K.UMC_ID = A.UMC_ID AND K .CCR_ID=A.CCR_ID ), 1, 1, '') AS ROLE_SUB_CAT_ID

于 2019-04-22T11:07:21.170 回答
-1

STUFF() 与 XML PATH

相同的 teble 来记录 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 回答