当前位置:首页 > 系统运维 > 正文内容

将一列中多行相同的值只显示在一行

a8116255311年前 (2015-10-20)系统运维12

数据库环境:SQL SERVER 2008R2

需求如题,左图为初始数据,右图是已实现需求的数据展示

简单说下我的实现思路

1.按id、name排序给原始数据生成行号

2.用递归判断上下行的id是否相等,之一次出现计数器初始值为1,后面再出现则计数器+1

3.对步骤2中生成的结果集再处理,计数器为1的id不变,计数器大于1则id为空字符串

我把实现的代码贴出来

/*准备基础数据*/ WITH    x0           AS ( SELECT   1 AS id ,                         'a' AS NAME                UNION ALL                SELECT   1 AS id ,                         'b' AS NAME                UNION ALL                SELECT   1 AS id ,                         'c' AS NAME                UNION ALL                SELECT   2 AS id ,                         'e' AS NAME                UNION ALL                SELECT   2 AS id ,                         'd' AS NAME                UNION ALL                SELECT   3 AS id ,                         'f' AS NAME                UNION ALL                SELECT   4 AS id ,                         'h' AS NAME                UNION ALL                SELECT   4 AS id ,                         'j' AS NAME              ),/*按id、name排序生成行号*/         x1           AS ( SELECT   ROW_NUMBER() OVER ( ORDER BY id, name ) AS tid ,                         CAst(id AS VARCHAR(2)) id ,                         name                FROM     x0              ),/*递归设置计数器*/         x2 ( tid, id, namelevel )           AS ( SELECT   tid ,                         id ,                         name , AS level                FROM     x1                WHERE    tid = 1                UNION ALL                SELECT   t1.tid ,                         t1.id ,                         t1.NAME ,                         CASE WHEN t1.id = t2.id THEN level + 1                              ELSE 1                         END level                FROM     x1 t1                         INNER JOIN x2 t2 ON t1.tid = t2.tid + 1              )     /*计数器为1则id不动,否则置为空字符串*/     SELECT  CASE WHEN level = 1 THEN id                  ELSE ''             END id ,             name     FROM    x2 

先比我的实现,有一网友提供了更简单的实现方式

我们来看一下他是怎么实现的 

WITH    x0           AS ( SELECT   1 AS id ,                         'a' AS NAME                UNION ALL                SELECT   1 AS id ,                         'b' AS NAME                UNION ALL                SELECT   1 AS id ,                         'c' AS NAME                UNION ALL                SELECT   2 AS id ,                         'e' AS NAME                UNION ALL                SELECT   2 AS id ,                         'd' AS NAME                UNION ALL                SELECT   3 AS id ,                         'f' AS NAME                UNION ALL                SELECT   4 AS id ,                         'h' AS NAME                UNION ALL                SELECT   4 AS id ,                         'j' AS NAME                UNION ALL                SELECT   1 AS id ,                         'j' AS NAME              )     SELECT  REPLACE(CASE WHEN ROW_NUMBER() OVER ( PARTITION BY CAST(ID AS VARCHAR(2)) ORDER BY NAME ) <> '1'                          THEN 0                          ELSE CAST(ID AS VARCHAR(20))                     END, 0, ''AS ID ,             NAME     FROM    x0 

实现的思路和我一样,但他的 *** 比我的简单,也容易理解。

我相信,实现该需求的 *** 不局限于这2种,欢迎各位看官提出更多的解题 *** 。

(本文完)

扫描二维码推送至手机访问。

版权声明:本文由2345好导航站长资讯发布,如需转载请注明出处。

本文链接:http://www.2345hao.cn/blog/index.php/post/22540.html

分享给朋友:

“将一列中多行相同的值只显示在一行” 的相关文章

windows 7/8.1正在启动windows时间长的解决方法

windows 7/8.1正在启动windows时间长的解决方法

正在启动windows时间长怎么办 小编带来了Windows 7/8.1正在启动windows时间长解决方法,假如有朋友在安装完Windows系统之后一直停留在“正在启动windows”的话,不妨试一试下文的方法哦~ 原因:Windows 7/8.1不完全支持UEFI,需要CSM(Comp...

windows 7系统开机提示press any key to restart的故障分析及解

windows 7系统开机提示press any key to restart的故障分析及解

Windows 7 64位系统开机后提示"press any key to restart",无法进入系统了,具体现象如下所示: 故障分析: 故障的主要原因还是硬盘的问题,可以先检查是不是接触不良或坏了,进行修复或更换即可。 解决方法: 1、开机按F8不动到高级选项出现在松手,选“...

上帝不止一个 更多Windows7 快捷模式.

上帝不止一个 更多Windows7 快捷模式.

国外媒体CNET NEWS就这个“上帝模式”和微软Windows部门主管Steven Sinofsky进行邮件交流后得知,这其实只是众多快捷方式中的一个,Sinofsky在邮件里给出了十多个这类快捷方式的关键字符串。 它们的建立方法和之前的“上帝模式”一样,在任意位置新建的一个文件夹,然后改名即可...

微软今天正式停止对windows 7的主流支持

微软今天正式停止对windows 7的主流支持

北京时间1月13日消息,根据计划,微软将于2015年1月13日正式结束对Windows 7SP1的“主流支持”,而这也标志着“扩展支持”阶段的开始,这个阶段将于2020年1月14日结束。 2013年10月份,微软终止销售独立的Windows 7系统安装包,并要求制造商于2014年10月份停止生...

windows 7系统件夹和文件都不显示名字如何解决

windows 7系统件夹和文件都不显示名字如何解决

假如碰到电脑里的文件夹和文件全都不显示名字了(如下图),是不是电脑中毒了呢 请教下笔者有没好的解决方法!下面是笔者给出的答案,希望能够帮助到大家! 首先打开你用来装图片的文件夹(缩略图下面的文字不显示的文件夹),然后但击工具栏上的“查看”选择“平铺”, 下面就是关键:要按住SHIFT键不...

windows 7玩网游PING高即网络延时比较高的解决方法

windows 7玩网游PING高即网络延时比较高的解决方法

经常听见有人说用Windows 7玩网络游戏的时候网络延时比较高,也就是ping比平时xp的时候高一点,一直找不到原因,很苦恼。今天我们终于找到理由了,原来是Windows 7的一个服务在作怪,这个服务叫:Multimedia Class Scheduler,就是这个服务让我的PING如此高,问题是...