zoukankan      html  css  js  c++  java
  • sqlserver如何实现从父级到子集的一级一级排序

    已知有这样一张表,数据内容如下,其中L_ID为自增id,L_PARID为父ID该ID指向L_ID,C_ZQNAME为省市区名称,如何通过一条sql语句实现从省到市再到区的查询排序

    查询sql如下

    WITH cte AS (
            select L_ID,L_PARID,C_ZQNAME ,CAST(C_ZQNAME AS VARCHAR(1000)) AS fullname,CAST(L_ID AS VARCHAR(1000)) AS fullid
            from T_SYS_ZQSJZD
            WHERE L_ZQJB=1 
            UNION ALL 
            SELECT a.L_ID,a.L_PARID,a.C_ZQNAME,CAST(b.fullname+'/'+a.C_ZQNAME AS VARCHAR(1000)) AS FULLname,
            CAST(b.fullid+'/'+CAST(a.L_ID as VARCHAR(1000)) AS VARCHAR(1000)) AS FULLID
            FROM T_SYS_ZQSJZD a INNER JOIN cte b ON a.L_PARID=b.L_ID
        )
        SELECT * FROM cte

    查询结果如下图

     该查询最好做成一个sql函数,创建函数方法如下

    CREATE FUNCTION [dbo].[RootOrgId]
    (
    ) 
    RETURNS TABLE 
    AS
    RETURN 
    (
        WITH cte AS (
            select L_ID,L_PARID,C_ZQNAME ,CAST(C_ZQNAME AS VARCHAR(1000)) AS fullname,CAST(L_ID AS VARCHAR(1000)) AS fullid
            from T_SYS_ZQSJZD
            WHERE L_ZQJB=1 
            UNION ALL 
            SELECT a.L_ID,a.L_PARID,a.C_ZQNAME,CAST(b.fullname+'/'+a.C_ZQNAME AS VARCHAR(1000)) AS FULLname,
            CAST(b.fullid+'/'+CAST(a.L_ID as VARCHAR(1000)) AS VARCHAR(1000)) AS FULLID
            FROM T_SYS_ZQSJZD a INNER JOIN cte b ON a.L_PARID=b.L_ID
        )
        SELECT * FROM cte
    )

    这样在sqlserver种就可以直接通过select * from RootOrgId()这样的查询方法实现查询了

  • 相关阅读:
    Java 重写(Override)与重载(Overload)
    Java 继承
    Java 异常处理
    Java Scanner 类
    Java 流(Stream)、文件(File)和IO
    Java 方法
    Java 正则表达式
    Beta冲刺——代码规范、冲刺任务与计划
    Beta冲刺——凡事预则立
    Beta冲刺——问题总结博客(事后诸葛亮和组员交换事宜)
  • 原文地址:https://www.cnblogs.com/dushaojun/p/12145056.html
Copyright © 2011-2022 走看看