需求场景: 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 对需要拼接的数据进行拼接处理,然后输出。不晓得是否还有更好的方法,欢迎讨论~~~~~~~~~

SQL SERVER 实现分组合并实现列数据拼接的更多相关文章

  1. 转:SQL SERVER数据库中实现快速的数据提取和数据分页

    探讨如何在有着1000万条数据的MS SQL SERVER数据库中实现快速的数据提取和数据分页.以下代码说明了我们实例中数据库的“红头文件”一表的部分数据结构: CREATE TABLE [dbo]. ...

  2. 关于SQL Server数据库中的标识列

    一.标识列的定义以及特点 SQL Server中的标识列又称标识符列,习惯上又叫自增列. 该种列具有以下三种特点: 1.列的数据类型为不带小数的数值类型 2.在进行插入(Insert)操作时,该列的值 ...

  3. SQL Server如何在变长列上存储索引

    这篇文章我想谈下SQL Server如何在变长列上存储索引.首先我们创建一个包含变长列的表,在上面定义主键,即在上面定义了聚集索引,然后往里面插入80000条记录: -- Create a new t ...

  4. SQL Server ---(CDC)监控表数据(转译)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 实现过程(Realization) 补充说明(Addon) 参考文献(References) ...

  5. SQL Server使用convert对datetime日期数据进行获取

    来源:http://database.51cto.com/art/201007/211883.htm 备注:本文的语法讲解确实是比较乱,似乎格式不太严谨.参考时还是以实例验证为准比较好 以下的文章主要 ...

  6. SQL Server 2008中新增的变更数据捕获(CDC)和更改跟踪

    来源:http://www.cnblogs.com/downmoon/archive/2012/04/10/2439462.html  本文主要介绍SQL Server中记录数据变更的四个方法:触发器 ...

  7. SQL Server中Id自增列的最大Id是多少

    什么是自增列 在SQL Server中可以将Id列设为自增.即无需为Id指定值,由SQL Server自动给该列赋值,每新增一列Id的值加一,初始值为1. 需要注意的是即使将原先添加的所有数据都删除, ...

  8. 浅析SQL Server数据库中的伪列以及伪列的含义

    SQL Server中的伪列 下午看QQ群有人在讨论(非聚集)索引的存储,说,对于聚集索引表,非聚集索引存储的是索引键值+聚集索引键值:对于非聚集索引表,索引存储的是索引键值+RowId,这应该是一个 ...

  9. 学习如何看懂SQL Server执行计划(一)——数据查询篇

    一.数据查询部分 1. 看到执行计划有两种方式,对sql语句按Ctrl+L,或按Ctrl+M打开显示执行计划窗口每次执行sql都会显示出相应的执行计划 2. 执行计划的图表是从右向左看的 3. SQL ...

随机推荐

  1. poj 3150 Cellular Automaton

    首先来看一下Sample里的第一组数据.1 2 2 1 2经过一次变换之后就成了5 5 5 5 4它的原理就是a0 a1 a2 a3 a4->(a4+a0+a1) (a0+a1+a2) (a1+ ...

  2. linux入门教程(五) Linux系统的远程登录

    首先要说一下,该部分内容对于linux初学者来讲并不是特别重要的,可以先跳过该章节,先学下一章,等学完后再回来看这一章. Linux大多应用于服务器,而服务器不可能像PC一样放在办公室,它们是放在ID ...

  3. mapreduce程序编写(WordCount)

    折腾了半天.终于编写成功了第一个自己的mapreduce程序,并通过打jar包的方式运行起来了. 运行环境: windows 64bit eclipse 64bit jdk6.0 64bit 一.工程 ...

  4. lintcode :搜索二维矩阵

    题目: 搜索二维矩阵 写出一个高效的算法来搜索 m × n矩阵中的值. 这个矩阵具有以下特性: 每行中的整数从左到右是排序的. 每行的第一个数大于上一行的最后一个整数. 样例 考虑下列矩阵: [ [1 ...

  5. python3.0与2.x之间的区别

    python3.0与2.x之间的区别: 1.性能 Py3.0运行pystone benchmark的速度比Py2.5慢30%.Guido认为Py3.0有极大的优化空间,在字符串和整形操作上可以取得很好 ...

  6. 获取其它进程窗口中的状态栏信息(FindWindowEx GetWindowThreadProcessId OpenProcess SendMessage轮番轰炸)

    HWND hWnd = ::FindWindow(NULL, _T("XXXXX")); if(NULL == hWnd) { return ; } HWND hWndStatus ...

  7. js、javascript正则表达式验证身份证号码

    function isCardNo(card) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X var reg = /(^\d{1 ...

  8. class_create()

    #define class_create(owner, name)               \({                                              \   ...

  9. 【POJ】3134 Power Calculus

    1. 题目描述给定一个正整数$n$,求经过多少次乘法或除法运算可以从$x$得到$x^n$?中间结果也是可以复用的. 2. 基本思路实际结果其实非常小,肯定不会超过20.因此,可以采用IDA*算法.注意 ...

  10. Control Flow in Async Programs

    Control Flow in Async Programs You can write and maintain asynchronous programs more easily by using ...