zoukankan      html  css  js  c++  java
  • 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 对需要拼接的数据进行拼接处理,然后输出。不晓得是否还有更好的方法,欢迎讨论~~~~~~~~~

  • 相关阅读:
    【CODEVS1287】矩阵乘法
    云时代架构读后感(十五)
    使用js拆分带参数的URL,将参数分离出来
    云时代架构读后感(十四)
    云时代架构读后感(十三)
    SSH框架整合报错org.springframework.web.context.ContextLoaderListener
    SOA架构分析
    云时代架构读后感(十二)
    Hibernate的CRUD配置及简单使用
    Struct2的简单的CRUD配置和使用
  • 原文地址:https://www.cnblogs.com/Ref-tian/p/SQLSERVE.html
Copyright © 2011-2022 走看看