0

下部のクエリを一般化して、サブグループに特定の値があるすべてのプロジェクトと追加のプロジェクト情報を取得したいのですが、[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]

次のクエリは機能しますが、1つのプロジェクトに対してのみ、サブクエリから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

あなたが私を助けてくれるか、私を正しい方向に向けてくれることを願っています

敬具


こんにちは私はあなたのやり方を試してきましたが、それでもうまくいきません。マルチパート識別子「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
4

1 に答える 1

0

このクエリを次のように整理する必要があると思います。

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

Common Table Expression (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
于 2012-07-10T23:00:23.050 に答える