需求场景: 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. java基础知识回顾之---java String final类普通方法的应用之“两个字符串中最大相同的子串”

    /* * 3,两个字符串中最大相同的子串. * "qwerabcdtyuiop" * "xcabcdvbn" *  * 思路: * 1,既然取得是最大子串,先看 ...

  2. WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )

    WPF:谈谈各种多线程去修改或访问UI线程数据的方法http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html 子线程非法访问UI线程的数据 ...

  3. yum工具介绍

    当你的linux处于联网状态时,yum工具能够非常方便的在Linux上安装各种软件.补丁等等,而且最重要的一点是完全不用管包的依赖关系.只需要简单的指定你要安装的软件名称,其他工作几乎都交给yum了, ...

  4. 利用BBRSACryptor实现iOS端的RSA加解密

    背景 RSA这种非对称加密被广泛的运用于网络数据的传输,但其在iOS上很难直接实现,BBRSACryptor框架通过移植openssl实现了iOS端的RSA,本文将介绍如何使用BBRSACryptor ...

  5. Yii2 基于RESTful架构的 advanced版API接口开发 配置、实现、测试

    环境配置: 开启服务器伪静态 本处以apache为例,查看apache的conf目录下httpd.conf,找到下面的代码 LoadModule rewrite_module modules/mod_ ...

  6. NSSize

    #import <Foundation/Foundation.h>   int main(int argc, const char * argv[]) {    @autoreleasep ...

  7. 显示Servlet API主要版本,次要版本以及服务器系统信息

    package com.mhb; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Servle ...

  8. Error running app: Instant Run requires 'Tools | Android | Enable ADB integration' to be enabled.解决办法

    刚刚更新AS到2.0版本,然后导入Api Demos的时候出现了这个错误. 解决办法:在AS的菜单栏,Tools->Android ->Enable ADB integration 勾选就 ...

  9. [HDOJ3367]Pseudoforest(并查集,贪心)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3367 求一个无向图上权值最大的伪森林. 伪森林:一个图的连通子图,当且仅当这个子图有且仅有一个环. 既 ...

  10. 转:Android 设置屏幕不待机

    本文转载于:http://blog.csdn.net/yudajun/article/details/7748760 Android设置支部待机有两种方法 第一种简单通过设置WindowManager ...