繁体   English   中英

选择语句和WITH语句错误

[英]Select statement and WITH statement error

我想在一个过程中一次选择deptUserCountchildDeptCount

ALTER PROCEDURE [dbo].[sp_dept_user_select]     
@dept_no        INT,
@company_no     INT

AS
BEGIN   
SET NOCOUNT ON;

SELECT
(   SELECT COUNT(U.user_no) 
    FROM [dbo].[tb_user] U WITH(NOLOCK)
    INNER JOIN [dbo].[tb_dept_user] DU WITH(NOLOCK)
    ON U.user_no = DU.user_no
    WHERE DU.dept_no = @dept_no
    AND U.company_no = @company_no
    AND U.user_level < 200
) AS deptUserCount

,(  WITH tblChild AS
    (
        SELECT dept_no, parent_dept_no, name
        FROM [dbo].[tb_dept] D WITH(NOLOCK)
        WHERE parent_dept_no = 2
        AND D.company_no = 1

        UNION ALL
        SELECT D.dept_no, D.parent_dept_no, D.name
        FROM [dbo].[tb_dept] D  WITH(NOLOCK)
        INNER JOIN tblChild  
        ON D.parent_dept_no = tblChild.dept_no
        WHERE D.company_no = 1
    )
    SELECT COUNT(D.dept_no)
    FROM [dbo].[tb_dept] D WITH(ROWLOCK)
    WHERE dept_no IN (SELECT dept_no FROM tblChild)
) AS childDeptCount

END

这是我现在编写的代码。 但是WITH语句说有一个错误

错误的语法错误
我该如何解决该错误? 还是我必须做一个单独的程序才能得到我想要的东西?

你应该去做这样的事情

WITH 
deptUserCount AS (
   SELECT ...
),
tblChild AS (
   SELECT ...
   UNION ALL
   SELECT ... FROM tblChild ...
)
SELECT ...
FROM tblChild JOIN deptUserCount...

你可以尝试如下

with deptUserCount as
(   SELECT COUNT(U.user_no) as dptcount 
    FROM [dbo].[tb_user] U WITH(NOLOCK)
    INNER JOIN [dbo].[tb_dept_user] DU WITH(NOLOCK)
    ON U.user_no = DU.user_no
    WHERE DU.dept_no = @dept_no
    AND U.company_no = @company_no
    AND U.user_level < 200
) ,tblChild as
(
       SELECT dept_no, parent_dept_no, name
        FROM [dbo].[tb_dept] D WITH(NOLOCK)
        WHERE parent_dept_no = 2
        AND D.company_no = 1

        UNION ALL
        SELECT D.dept_no, D.parent_dept_no, D.name
        FROM [dbo].[tb_dept] D  WITH(NOLOCK)
        INNER JOIN tblChild  
        ON D.parent_dept_no = tblChild.dept_no
        WHERE D.company_no = 1
), childDeptCount as
(
SELECT COUNT(D.dept_no) as childdptCnt
FROM [dbo].[tb_dept] D WITH(ROWLOCK)
WHERE dept_no IN (SELECT dept_no FROM tblChild)
) select a.childdptCnt,b.dptcount  from childDeptCount a,deptUserCount  b

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM