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 上一个和下一个网关未正确显示_Sql_Sql Server_Common Table Expression - Fatal编程技术网

Sql 上一个和下一个网关未正确显示

Sql 上一个和下一个网关未正确显示,sql,sql-server,common-table-expression,Sql,Sql Server,Common Table Expression,嗨,我有以下查询,这是一个显示1个项目的下一个网关信息的查询。 但我想将其作为CTE连接到另一个查询,但我需要更改此[Gateway].[ProjectFk]=744,因为744仅用于一行,每行都有一个不同的ProjectFk,我可以给CTE一个参数吗 SELECT [Gateway].[ProjectFk],[GatewayTitle].[Title],[Gat_Date],[GatewayStatus].[Title] FROM [LocalGTPDatabase].[dbo].[Gatew

嗨,我有以下查询,这是一个显示1个项目的下一个网关信息的查询。 但我想将其作为CTE连接到另一个查询,但我需要更改此[Gateway].[ProjectFk]=744,因为744仅用于一行,每行都有一个不同的ProjectFk,我可以给CTE一个参数吗

SELECT [Gateway].[ProjectFk],[GatewayTitle].[Title],[Gat_Date],[GatewayStatus].[Title]
FROM [LocalGTPDatabase].[dbo].[Gateway]
LEFT JOIN [LocalGTPDatabase].[dbo].[GatewayTitle] ON [GatewayTitle].[ID]=[Gateway].[Gat_TitleFk]
LEFT JOIN [LocalGTPDatabase].[dbo].[GatewayStatus] ON [GatewayStatus].[ID]=[Gateway].[Gat_StatusFk]
LEFT JOIN [LocalGTPDatabase].[dbo].[Project] ON [Project].[ID]=[Gateway].[ProjectFk]
WHERE [GatewayStatus].[Title]='Target' and [Gateway].[ProjectFk]=744
order by CONVERT(DATETIME, CASE WHEN ISDATE([Gat_Date]) = 1 THEN [Gat_Date] END) asc
但是,当我将此查询与其他信息相结合时,它不会显示数据,有时会显示数据,但不像我希望的那样多,我希望获得所有项目及其网关:

  WITH

 /****** Next Gateway  ******/
MyCTE10 (ProjectFk, nextGatTitle, nextGatDate, nextGatStatus)as
(SELECT TOP 1 [Gateway].[ProjectFk],[GatewayTitle].[Title],[Gat_Date],[GatewayStatus].[Title]
FROM [LocalGTPDatabase].[dbo].[Gateway]
LEFT JOIN [LocalGTPDatabase].[dbo].[GatewayTitle] ON [GatewayTitle].[ID]=[Gateway].[Gat_TitleFk]
LEFT JOIN [LocalGTPDatabase].[dbo].[GatewayStatus] ON [GatewayStatus].[ID]=[Gateway].[Gat_StatusFk]
LEFT JOIN [LocalGTPDatabase].[dbo].[Project] ON [Project].[ID]=[Gateway].[ProjectFk]
WHERE [GatewayStatus].[Title]='Target'
order by CONVERT(DATETIME, CASE WHEN ISDATE([Gat_Date]) = 1 THEN [Gat_Date] END) asc ) ,

    /****** Get all the links between projects and teams ******/
SELECT [LinkProject-Area].[ID] as [Link_ID],[LinkProject-Area].[ProjectFk] as [Project_ID],[Project].[GTDSnr]    as [Proj_No],[Project].[Title]   
, [MyCTE10].[nextGatTitle] as [Next Gateway], [MyCTE10].[nextGatDate] as [Next Gateway Date],     [MyCTE10].[nextGatStatus] as [Next Gateway Status]
FROM [LocalGTPDatabase].[dbo].[LinkProject-Area]
LEFT JOIN [MyCTE10] ON [MyCTE10].ProjectFk = [LinkProject-Area].[ProjectFk]
WHERE [Project].[ID]>0
order by [Proj_No],[hasLead] desc
我做错了什么?这是因为极限一,但我如何克服这个问题? 我在我的CTE中选择项目的所有网关,然后我只收集第一个,当我单独这样做时,我可以添加一个WHERE[ProjectFk],我获得该项目的所有网关,如果我限制它,我可以获得我需要的网关,但因为我要获取所有项目,我需要从查询的该部分删除where projectFk=something,并在projectFk上加入它,但现在它不仅显示了两个日期,一个是下一个网关,一个是最后一个网关,因为有限制

解决了这个问题:我不认为您可以使用CTE来解决这个问题,但您必须使用用户定义的函数/将第一个查询放在projectFk是参数的函数中: 然后像这样加入他们: 外敷 dbo.LastGatewayAll([LinkProject Area].[ProjectFk])作为子广播网关 这将使您有可能获得如下数据: 子广播网关。[gateway]为[Last GW],子广播网关。[status]为[Last GW status],子广播网关。[Gat_Date]为[Last GW Date]
我希望这篇文章能更清楚地说明我想做什么…

我认为你的问题太大,无法分析。你们能把你们认为不起作用的查询的相关部分放进去吗?我能看出上面的查询并没有使用Top子句和下面的查询并没有使用Top子句的区别。“MyCTE10(ProjectFk,NextGatitle,nextGatDate,nextGatStatus)”是什么意思?我真的不明白你在干什么。我很抱歉,好点了吗?还是不够精确?第一个查询是一个单独的查询,用于获取1个项目的下一个网关,在接下来的查询中,我尝试将该查询与我已经收集项目数据的查询连接起来,这是MyCTE10。但由于限制,我正在犯错误……在较低的查询[Gateway].[ProjectFk]=744中缺少此条件