• SQL SERVER 实现分组合并实现列数据拼接


    需求场景: SQL SERVER 中组织的数据结构是一个层级关系,现在需要抓出每个组织节点以上的全部组织信息,数据示例如下:

    ADOrg_ID--------------ParentID-----------------ShortName

    001                                                                 顶级组织名称

    001.021                     001                                 二级组织名称

    001.022                     001.021                           三级组织名称

    001.021.211               001.022                           四级组织名称

    001.023                     001.021                            三级组织名称

    现在需要得到的结果为:

    ADOrg_ID--------------OrgName------------------------------------------ShortName

    001                            顶级组织名称                                                        顶级组织名称

    001.021                     顶级组织名称,二级组织名称                                       二级组织名称

    001.022                     顶级组织名称,二级组织名称,三级组织名称                      三级组织名称

    001.021.211               顶级组织名称,二级组织名称,三级组织名称,四级组织名称    四级组织名称

    001.023                     顶级组织名称,二级组织名称,三级组织名称                      三级组织名称

    SQL--------------------------------


     
    DECLARE org cursor for select ADOrg_ID,ShortName from ADOrganize 
    DECLARE @ORGID nvarchar(100) 
    DECLARE @ORGSHORTNAME nvarchar(100) 
    DECLARE @RESULT table ( [ID] nvarchar(50) NULL, [OrgInfo] nvarchar(MAX) NULL, [ShortName] nvarchar(50) NULL ) 
    open org; 
    FETCH NEXT FROM org INTO @ORGID,@ORGSHORTNAME 
    WHILE @@FETCH_STATUS=0 
    BEGIN 
    with node as ( select * from ADOrganize(nolock) where ADOrg_ID=@ORGID union all SELECT par.* FROM ADOrganize(nolock) AS par INNER JOIN node AS RC ON par.ADOrg_ID = RC.ParentID )
     INSERT INTO @RESULT SELECT @ORGID,ShortName,@ORGSHORTNAME FROM ADOrganize(nolock) WHERE ADOrg_ID IN (SELECT ADOrg_ID FROM node N ) 
    FETCH NEXT FROM ORG INTO @ORGID,@ORGSHORTNAME 
    END ; 
    CLOSE org; 
    DEALLOCATE org; 
    SELECT ID, data=stuff((SELECT ','+OrgInfo FROM @RESULT t WHERE ID=t1.ID FOR XML PATH('')), 1, 1, '') ,SHORTNAME FROM @RESULT t1 GROUP BY ID,SHORTNAME
     

    说明:因为没有想到好的方法所以直接用游标查询后对数据进行处理,存储到临时表中,然后对临时表的数据进行分组,使用 stuff/FOR XML 对需要拼接的数据进行拼接处理,然后输出。不晓得是否还有更好的方法,欢迎讨论~~~~~~~~~

  • 相关阅读:
    mysql高效分页
    mybatis插入值为空时需要制定类型
    NoClassDefFoundError
    mybatis动态sql中的两个内置参数(_parameter和_databaseId)
    Java位运算在程序设计中的使用:位掩码(BitMask)
    基于netty的聊天室(保持和获取客户端channel)
    Netty自定义协议半包编解码
    位运算基础
    JAVA加密系列(四)- 位运算加密(异或加密)
    位运算基础
  • 原文地址:https://www.cnblogs.com/Ref-tian/p/SQLSERVE.html
Copyright © 2020-2023  润新知