Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.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 CTE中的对象名称无效_Sql_Sql Server - Fatal编程技术网

Sql CTE中的对象名称无效

Sql CTE中的对象名称无效,sql,sql-server,Sql,Sql Server,我在下面的查询中尝试了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

我在下面的查询中尝试了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

通用表表达式有一定的使用时间和地点。我不认为这是其中之一。。。通过嵌套子查询、递归和重构实现复杂连接,以实现可维护性。在我看来,两张桌子的连接似乎不符合要求

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

请不要使用不适用于您的问题的标记。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请仅添加您实际使用的数据库的标记我在您的
T3
CTE中没有看到名为
DepID
的字段,但您正在尝试加入该字段。您正在选择的表是否实际称为
employee
employee1
?每个CTE定义中的每个SELECT语句是否都独立运行而没有错误?发布问题时最好包含整个错误消息。根据函数
datepart
以及MS Access中不提供CTE(使用datepart()的唯一其他数据库)这一事实,在问题中添加了sql server标记您好,感谢您的回复,在上面的查询中,行E对象的总和丢失,尽管添加了我得到的错误