zoukankan      html  css  js  c++  java
  • WITH AS 语句在部门层级关系中的应用

    CREATE TABLE DEPT
    (
      DEPT_ID NVARCHAR(20) NOT NULL PRIMARY KEY
      ,DEPT_NAME NVARCHAR(40)
      ,PARENT_ID NVARCHAR(20)
      )
    GO
    
    INSERT INTO DEPT(DEPT_ID,DEPT_NAME,PARENT_ID)
    SELECT '10','工厂A','' UNION ALL
    SELECT '11','车间A','10' UNION ALL
    SELECT '12','车间B','10' UNION ALL
    SELECT '13','生产线1','11' UNION ALL
    SELECT '14','生产线2','11' UNION ALL
    SELECT '15','生产线3','11' UNION ALL
    SELECT '16','工序1组','13' UNION ALL
    SELECT '17','工序2组','13'
    
    --(1)查询指定部门的上级部门
    DECLARE @dept_id NVARCHAR(20)
    SET @dept_id='13';
    WITH w_dept AS (
      SELECT d.* FROM   dbo.DEPT d WHERE  d.DEPT_ID = @dept_id
      UNION ALL
      SELECT d.*  FROM   dbo.DEPT d INNER JOIN w_dept ON d.dept_id = w_dept.PARENT_ID
      )
    SELECT * FROM w_dept ORDER BY DEPT_ID
    /* 
      延伸应用:
      在部门表DEPT中增加层级LEVEL,就可以定位到某个层级的部门,比如找出当前部门的二级父部门
      SELECT * FROM w_dept WHERE LEVEL=2 
     */
    
    --(2)查询指定部门的下属部门
    DECLARE @dept_id NVARCHAR(20)
    SET @dept_id='13';
    WITH w_dept AS (
      SELECT d.* FROM   dbo.DEPT d WHERE  d.DEPT_ID = @dept_id
      UNION ALL
      SELECT  d.*  FROM   dbo.DEPT d INNER JOIN w_dept ON d.PARENT_ID = w_dept.DEPT_ID
      )
    SELECT * FROM w_dept ORDER BY DEPT_ID 
    
    /* 
      延伸应用:
      把部门编号串成一个字符串,然后查询当前部门及下属部门所有员工
      DECLARE @TEMPS NVARCHAR(MAX)
      SELECT @TEMPS=ISNULL(@TEMPS,'') + RTRIM(DEPT_ID) +'|' FROM w_dept
      SELECT @TEMPS
      SELECT * FROM EMP WHERE CHARINDEX(RTRIM(DEPT_ID)+'|',@TEMPS)>0
     */

    官网文档参考:

    WITH common_table_expression (Transact-SQL)

    https://docs.microsoft.com/en-us/sql/t-sql/queries/with-common-table-expression-transact-sql

  • 相关阅读:
    新年初六
    新年初五
    新年初四
    Who moved my cheese?
    红螺寺踏春
    JSP基本语法--实例演练
    JSP基础语法--跳转指令 jsp:forward page
    JSP基本语法--包含指令<%@include file="路径"%> <jsp:include page>
    JSP基本语法--Page指令 <%@page 属性=”内容“%>
    JSP注释及scriptlet <%局部%><%!全局%><%=输出%>
  • 原文地址:https://www.cnblogs.com/liangchua/p/6635385.html
Copyright © 2011-2022 走看看