子查询中的多个值

子查询中的多个值

问题描述:

我想概括一下底部的查询,以便获得所有项目和附加项目信息,其中我的子组具有特定的值,但无法使其工作,因为我无法获取[ projectFk]子查询中的多个值

SELECT 
     [HeadCount].[ID], 
     [LinkProjectAreaFk], 
     [Month1], 
     [Month2], 
     [Month3], 
     [Month4], 
     [Month5], 
     [Month6], 
     [Month7], 
     [Month8], 
     [Month9], 
     [Month10], 
     [Month11], 
     [Month12], 
     [HcYear], 
     [ApproveDirFk], 
     [ApproveDirDate], 
     [FreezeFk], 
     [freezeDate], 
     [CDSID],[FreezeTypeFk], 
     [ApproveDirTypeFk], 
     [SourcesFk], 
     [Project].[Title], 
     [Project].[Title] 
FROM 
    [HeadCount], 
     [Project] 
WHERE 
     [HeadCount].[LinkProjectAreaFk] 
    IN 
     (SELECT 
       [ID] 
     FROM 
       [LinkProject-Area] 
     WHERE 
     [SubgroupFk]=1) 
    and 
     [Project].[ID]=[LinkProject-Area].[ProjectFk] 

下面的查询工作,但只适用于一个项目如何我也从我的子查询得到projectFk,因为当我看着这件事,他们说这是不可能的,并与左外连接,我可以”吨得到它的工作在所有

SELECT 
     [HeadCount].[ID], 
     [LinkProjectAreaFk], 
     [Month1], 
     [Month2], 
     [Month3], 
     [Month4], 
     [Month5], 
     [Month6], 
     [Month7], 
     [Month8], 
     [Month9], 
     [Month10], 
     [Month11], 
     [Month12], 
     [HcYear], 
     [ApproveDirFk], 
     [ApproveDirDate], 
     [FreezeFk], 
     [freezeDate], 
     [CDSID], 
     [FreezeTypeFk], 
     [ApproveDirTypeFk], 
     [SourcesFk], 
     [Project].[Title], 
     [Project].[Title] 
FROM 
     [HeadCount], 
     [Project] 
WHERE 
     [HeadCount].[LinkProjectAreaFk] IN 
     (SELECT 
      [ID] 
     FROM 
      [LinkProject-Area] 
     WHERE 
      [ProjectFk]=90 
     and 
      [SubgroupFk]=1) 
     and 
      [Project].[ID]=90 

希望你能帮助我或指出我在正确的方向

亲切的问候


您好我一直试图用自己的方式,但它仍然不会理所应当: I'me越来越多部分标识符“MyCTE.ProjectFK”可能不受约束。和 无法绑定多部分标识符“MyCTE.ID”。当我查看这个错误时有什么错误与使用我的连接错误任何想法有关?

 ;WITH MyCTE (ID, ProjectFK) 
    AS 
    (  
    SELECT 
      ID, 
      ProjectFk  
    FROM 
      [LinkProject-Area]  
    WHERE 
      SubgroupFk = 1 
    ) 

    SELECT 
      * 
    FROM 
      [LinkProject-Area] 
    INNER JOIN 
      HeadCount ON [LinkProjectAreaFk] = MyCTE.ID 
    INNER JOIN 
      Project ON Project.ID = MyCTE.ProjectFK 
+0

如果您将查询简化为显示问题所需的最低限度,将其格式化以使其更易于阅读(除非需要,请移除括号),提供样本数据以及期望的结果哟你的SQL Server版本。 – Pondlife 2012-07-10 21:29:18

我想你会想组织这次查询作为这样的事:

SELECT ... 
FROM 
(
    SELECT ID, ProjectFk 
    FROM [LinkProject-Area] 
    WHERE SubgroupFk = 1 
) LinkProjectAreas 
INNER JOIN HeadCount ON LinkProjectAreaFK = LinkProjectAreas.ID 
INNER JOIN Project ON Project.ID = LinkProjectAreas.ProjectFK 

你也可以用公用表表达式(CTE)组织本:

;WITH LinkProjectAreas (ID, ProjectFK) AS 
(
    SELECT ID, ProjectFk 
    FROM [LinkProject-Area] 
    WHERE SubgroupFk = 1 
) 
SELECT ... 
FROM LinkProjectAreas 
INNER JOIN HeadCount ON LinkProjectAreaFK = LinkProjectAreas.ID 
INNER JOIN Project ON Project.ID = LinkProjectAreas.ProjectFK 
+0

非常感谢您的回复,目前我正在努力使您的解决方案能够正常工作,但它给我提供了[LinkProjectAreaFk]上的错误,因为无效的列名或标识符无法被绑定......但真的非常感谢 – Jelle 2012-07-11 08:52:02

+0

嗨,我一直在尝试你的方式,但它仍然没有像它应该那样:我要获得多部分标识符“MyCTE.ProjectFK”不能被绑定。并且多部分标识符“MyCTE.ID”不能被绑定。当我查看这个错误时有什么错误与使用我的连接错误任何想法有关? ; WITH MyCTE(ID,ProjectFK)AS(SELECT ID,ProjectFk FROM [LinkProject-Area] Where SubgroupFk = 1)SELECT * FROM [LinkProject-Area] INNER JOIN HeadCount ON [LinkProjectAreaFk] = MyCTE.ID INNER JOIN Project ON Project。 ID = MyCTE.ProjectFK – Jelle 2012-07-11 11:40:45

+0

您必须选择数据从CTE然后INNER JOIN到其他表。 – 2012-07-11 14:19:34