如何显示具有非活动组织的活动子组织(SQL Server中的树)

时间:2018-07-16 22:25:41

标签: sql-server

我有一棵有活跃组织和不活跃组织的树,并且进行了搜索。

如果您选择一个不活跃的组织,那么您只会在树中看到不活跃的组织。

如果我有一个不活跃的组织(子级)(子级)(子级),我如何显示一个不活跃的组织的子组织

WITH h$cte AS 
(
     SELECT   
         ORGANIZATIONS.ORGANIZATION_ID ,
         ORGANIZATIONS.PARENT_ID ,
         ORGANIZATIONS.TITLE ,
         ORGANIZATIONS.ARABIC_TITLE ,
         ORGANIZATION_TYPES.ORGANIZATION_TYPE_ID ,
         ORGANIZATION_TYPES.TITLE AS TITLE$2 ,
         ORGANIZATION_TYPES.ARABIC_TITLE AS ARABIC_TITLE$2 ,
         ORGANIZATIONS.IS_ACTIVE ,
         1 Level ,
         CASE WHEN @pLANGUAGE = 0
                 THEN CAST ('/' + ORGANIZATIONS.TITLE AS NVARCHAR(MAX))
                 ELSE CAST ('/' + ORGANIZATIONS.ARABIC_TITLE AS NVARCHAR(MAX))
         END sort_path
     FROM     
         ERP.ORGANIZATIONS
     INNER JOIN 
         ERP.ORGANIZATION_TYPES ON ORGANIZATIONS.ORGANIZATION_TYPE_ID = ORGANIZATION_TYPES.ORGANIZATION_TYPE_ID
     WHERE    
         ORGANIZATIONS.PARENT_ID IS NULL

     UNION ALL

     SELECT   
         ORGANIZATIONS.ORGANIZATION_ID ,
         ORGANIZATIONS.PARENT_ID ,
         ORGANIZATIONS.TITLE ,
         ORGANIZATIONS.ARABIC_TITLE ,
         ORGANIZATION_TYPES.ORGANIZATION_TYPE_ID ,
         ORGANIZATION_TYPES.TITLE AS TITLE$2 ,
         ORGANIZATION_TYPES.ARABIC_TITLE AS ARABIC_TITLE$2 ,
         ORGANIZATIONS.IS_ACTIVE ,
         h$cte.Level + 1 Level ,
         CASE WHEN @pLANGUAGE = 0
                 THEN CAST (h$cte.sort_path + '/' + ORGANIZATIONS.TITLE AS NVARCHAR(MAX))
                 ELSE CAST (h$cte.sort_path + '/' + ORGANIZATIONS.ARABIC_TITLE AS NVARCHAR(MAX))
         END sort_path
     FROM     
         ERP.ORGANIZATIONS
     INNER JOIN 
         ERP.ORGANIZATION_TYPES ON ORGANIZATIONS.ORGANIZATION_TYPE_ID = ORGANIZATION_TYPES.ORGANIZATION_TYPE_ID 
         ,h$cte
     WHERE    
         h$cte.ORGANIZATION_ID = ORGANIZATIONS.PARENT_ID
)
SELECT 
    h$cte.ORGANIZATION_ID,
    ISNULL(h$cte.PARENT_ID, -1) AS PARENT_ID,
    h$cte.TITLE ,
    h$cte.ARABIC_TITLE ,
    h$cte.TITLE ORGANIZATION_TYPE ,
    h$cte.ARABIC_TITLE ARABIC_ORGANIZATION_TYPE ,
    Level ,
    ERP.EF_ORGANIZATION_ISPARENT(h$cte.ORGANIZATION_ID) AS is_parent ,
    h$cte.IS_ACTIVE ,
    ISNULL(ORGANIZATIONS_OWNERS.ORGANIZATION_OWNER_ID, -1) AS ORGANIZATION_OWNER_ID ,
    ISNULL(ASSIGNMENTS.ASSIGNMENT_ID, -1) AS ASSIGNMENT_ID ,
    HRMS.FN_GETFORMATTEDARABPEOPLENAME(ASSIGNMENTS.PERSON_ID, GETDATE()) AS OWNER_ARABIC_TITLE ,
    HRMS.FN_GETFORMATTEDPEOPLENAME(ASSIGNMENTS.PERSON_ID, GETDATE()) AS OWNER_TITLE ,
    ISNULL(TAKLEEF.START_DATE,ISNULL(ORGANIZATIONS_OWNERS.EFFECTIVE_START_DATE, GETDATE())) AS EFFECTIVE_START_DATE ,
    ISNULL(TAKLEEF.END_DATE,ISNULL(ORGANIZATIONS_OWNERS.EFFECTIVE_END_DATE, GETDATE())) AS EFFECTIVE_END_DATE
FROM   
    h$cte
LEFT OUTER JOIN 
    HRMS.ORGANIZATIONS_OWNERS ON h$cte.ORGANIZATION_ID = ORGANIZATIONS_OWNERS.ORGANIZATION_ID
                              AND ORGANIZATIONS_OWNERS.EFFECTIVE_END_DATE IS NULL
LEFT OUTER JOIN 
    HRMS.TAKLEEF ON [h$cte].ORGANIZATION_ID = TAKLEEF.DEPARTMENT_ID
                 AND Takleef.IS_DEPARTMENT_OWNER = 1
                 AND GETDATE() BETWEEN START_DATE AND ISNULL(END_DATE, GETDATE())
LEFT OUTER JOIN 
    HRMS.ASSIGNMENTS ON ISNULL(TAKLEEF.ASSIGNMENT_ID, ORGANIZATIONS_OWNERS.ASSIGNMENT_ID) = ASSIGNMENTS.ASSIGNMENT_ID
ORDER BY 
    sort_path;

0 个答案:

没有答案