Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 将SQL Server查询重写为postgresql并将stuff()替换为字符串_agg()时出错_Sql Server_Postgresql - Fatal编程技术网

Sql server 将SQL Server查询重写为postgresql并将stuff()替换为字符串_agg()时出错

Sql server 将SQL Server查询重写为postgresql并将stuff()替换为字符串_agg()时出错,sql-server,postgresql,Sql Server,Postgresql,我正在将一个应用程序从SQL Server迁移到Postgresql,并且必须重写一些定期运行的查询。我在其中一个方面特别有问题,因为我必须用string\u agg()替换stuff()和XML Path。通常我可以这样做,但在本例中,stuff()是一个子查询,因此在运行此操作时,我收到一个“由用作表达式的子查询返回的多行”错误。我对SQL和PostgreSql没有足够的经验来解决这个问题 我遇到问题的SQL Server部分: SELECT P.pkey + '-' + CAST(JI.i

我正在将一个应用程序从SQL Server迁移到Postgresql,并且必须重写一些定期运行的查询。我在其中一个方面特别有问题,因为我必须用
string\u agg()
替换
stuff()
XML Path
。通常我可以这样做,但在本例中,
stuff()
是一个子查询,因此在运行此操作时,我收到一个“由用作表达式的子查询返回的多行”错误。我对SQL和PostgreSql没有足够的经验来解决这个问题

我遇到问题的SQL Server部分:

SELECT P.pkey + '-' + CAST(JI.issuenum AS VARCHAR(18)) [CASE NUMBER]
, IT.pname [ISSUE TYPE (PREVIOUSLY CASE REASON)]
, JI.CREATED [OPENED DATE]
, CRE.display_name [CREATOR]
, DEP.BIG_DATA [DEPARTMENT]
, REG.BIG_DATA [OFFICE]
, JI.RESOLUTIONDATE [CLOSED DATE]
, STUFF((     SELECT CAST(', ' + COM.cname AS VARCHAR(MAX))
                     FROM nodeassociation NAC
                     INNER JOIN component COM ON NAC.SINK_NODE_ID = COM.ID
                     WHERE NAC.SOURCE_NODE_ID = JI.ID
                     ORDER BY COM.cname
                     FOR XML PATH('')), 1, 2, '') [COMPONENT(S)]
, RCS.customvalue [RESOLUTION CODE (SERVICE)]
, ISNULL(RCI1.customvalue + ' - ', '') + RCI2.customvalue [RESOLTUION CODE (INCIDENT)]
, ISNULL(RCMT1.customvalue + ' - ', '') + ISNULL(RCMT2.customvalue + ' - ','') + ISNULL(RCMT3.customvalue,'') [RESOLTUION CODE (3-tier)]
我失败的postgres重写返回错误:

由用作表达式的子查询返回的多行

我已经用它来替换
stuff()
string\u agg()
,但它不包括子查询。

尝试替换它:

string_agg((SELECT COM.cname 
                     FROM nodeassociation NAC
                     INNER JOIN component COM ON NAC.SINK_NODE_ID = COM.ID
                     WHERE NAC.SOURCE_NODE_ID = JI.ID
                     ORDER BY COM.cname, p.pkey, JI.issuenum, IT.pname, JI.CREATED, CRE.display_name, JI.RESOLUTIONDATE, RCS.customvalue, RCI1.customvalue, RCI2.customvalue, RCMT1.customvalue, RCMT2.customvalue, RCMT3.customvalue, DEP."BIG_DATA", REG."BIG_DATA" 
                     ), '') AS COMPONENTS
关于这一点:

(SELECT string_agg(COM.cname,'')
                     FROM nodeassociation NAC
                     INNER JOIN component COM ON NAC.SINK_NODE_ID = COM.ID
                     WHERE NAC.SOURCE_NODE_ID = JI.ID
                     ORDER BY COM.cname, p.pkey, JI.issuenum, IT.pname, JI.CREATED, CRE.display_name, JI.RESOLUTIONDATE, RCS.customvalue, RCI1.customvalue, RCI2.customvalue, RCMT1.customvalue, RCMT2.customvalue, RCMT3.customvalue, DEP."BIG_DATA", REG."BIG_DATA" 
                     ) AS COMPONENTS

谢谢@Мааааааааааааааааа。我想问题可能出在我这方面,我是如何进行连接的。您可以通过替换
string\u agg(COM.cname,”)
on
count(*)
来检查子查询是否返回任何值。如果所有值都等于0,那么子查询中的问题就出现了。HI@@Мааааааааааааааа107“错误:关系表名不存在错误。”。如果我从dbo.AO\u 2C3287\u USER\u数据在SQL select*中运行查询,我会得到几百条记录。如果我在postgres中运行此操作,我将收到“关系不存在”错误。我可以使用双引号绕过错误,但没有返回任何数据。所以我相信这就是为什么我在完整查询中得到null。我现在正在想办法解决这个问题,但应该不会太难。我是个笨蛋。当我执行应用内导出和导入时,应用程序没有填充一些表。所以我查询的一些表是空的,而我希望它们有数据。添加测试数据证实了这一点。这个问题现在已经解决了。
(SELECT string_agg(COM.cname,'')
                     FROM nodeassociation NAC
                     INNER JOIN component COM ON NAC.SINK_NODE_ID = COM.ID
                     WHERE NAC.SOURCE_NODE_ID = JI.ID
                     ORDER BY COM.cname, p.pkey, JI.issuenum, IT.pname, JI.CREATED, CRE.display_name, JI.RESOLUTIONDATE, RCS.customvalue, RCI1.customvalue, RCI2.customvalue, RCMT1.customvalue, RCMT2.customvalue, RCMT3.customvalue, DEP."BIG_DATA", REG."BIG_DATA" 
                     ) AS COMPONENTS