2017-05-01 19 views
-1

私の下のクエリで2つのテーブルを結合し、無効なオブジェクトエラーを取得しましたが、存在します。CTEのオブジェクト名が無効

;WITH t1 
AS (
    SELECT DepId 
     , COUNT(EmpId) AS TotalHeadCount 

    FROM Emploee 

    WHERE (datepart(yyyy, DOJ) BETWEEN 2005 AND 2017) 
     AND STATUS = 0 

    GROUP BY DepId 
    ) 
    , t2 
AS (
    SELECT DepId 
     , COUNT(EmpId) AS NewJoinees 

    FROM Emploee 

    WHERE (DATEPART(yyyy, DOJ) = 2017) 
     AND (DATEPART(mm, DOJ) = 01) 
     AND datepart(mm, DOJ) >= 12 
     AND STATUS = 0 

    GROUP BY DepId 
    ) 
    , t3 
AS (
    SELECT Tobehired AS TOBEHIRED 
     , OpenPosition AS OPENPOSITION 
     , STATUS 

    FROM Employee1 
    ) 

SELECT t1.DepId 
    , CASE 
     WHEN TotalHeadCount IS NULL 
      THEN '0' 
     ELSE TotalHeadCount 
     END AS TotalHeadCount 
    , CASE 
     WHEN NewJoinees IS NULL 
      THEN '0' 
     ELSE NewJoinees 
     END AS NewJoinees 
    , Tobehired 
    , OpenPosition 
    , STATUS 

FROM t1 

FULL JOIN t2 
    ON t1.DepId = t2.DepId 

FULL JOIN t3 
    ON t1.DepId = t3.DepId 
+0

ご質問に該当しないタグは使用しないでください。実際に使用しているデータベースが不明なため、データベースタグを削除しました。実際に使用しているデータベースのみ*のタグを追加してください。 –

+2

あなたの 'T3' CTEに' DepID'という名前のフィールドはありませんが、あなたはそれに参加しようとしています。 – JNevill

+0

選択しているテーブルは、実際に 'emploee'と' employee1'と呼ばれていますか?各CTE定義内の各SELECT文は、エラーなしで独自に実行されますか? – JNevill

答えて

0

共通テーブル式を使用する時間と場所があります。私はこれがそれらの1つだとは思わない...複雑なサブクエリ、再帰、保守性のためのリファクタリングと結合する。私の意見では、2つの表の結合が法案に合っていないようです。

SELECT E.DEPID 
    , sum(case when datepart(yyyy,E.doj) between 2005 and 2017 and status =0 then 1 else 0 end as TotalHeadCount 
    , sum(case when E.doj >= cast('2017-01-12' as datetime) then 1 else 0 end as NewJoinees 
    , E1.Tobehired 
    , E1.OpenPosition 
    , E1.STATUS 
FROM Employee E 
LEFT JOIN Emplyee1 E1 
on E.DepID = E1.DepID 
GROUP BY E.DEPID, 
     , E1.Tobehired 
     , E1.OpenPosition 
     , E1.STATUS 
+0

こんにちは、返信いただきありがとうございます。上記のクエリでは、行Eのオブジェクトが足りない前に、エラーが発生していますが – Alston

関連する問題