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

时间:2013-04-02 15:41:24

标签: sql sql-server common-table-expression

您好我有以下查询,这是一个显示1个项目的下一个网关信息的查询。 但我希望将此作为CTE加入另一个查询,但我需要更改此[Gateway]。[ProjectFk] = 744因为744仅用于1行,每行有不同的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 =的东西,然后将它加入projectFk,但现在它不仅显示2个日期1下一个网关和1为最后一个网关因为限制,...

解决了它:我认为你不能使用CTE,但你必须使用用户定义的函数/将第一个查询放在一个函数中,其中projectFk是一个参数: 然后像这样加入他们:      外面申请      dbo.LastGatewayAll([LinkProject-Area]。[ProjectFk])AS subLastGateWays 这将使您有可能获得这样的数据:     subLastGateWays。[gateway] as [Last GW],subLastGateWays。[status] as [Last GW Status],subLastGateWays。[Gat_Date] as [Last GW Date] 我希望这篇文章对我试图做的事情有点清楚......

0 个答案:

没有答案