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

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

a8116255310年前 (2015-10-20)系统运维8

数据库环境: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://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...

如何设置Win 7通知栏重新显示电源按钮

如何设置Win 7通知栏重新显示电源按钮

有些使用本本的朋友可能会发现,右下角通知栏区域会无法显示电源按钮,导致在插上电源或者是使用电池的时候都无法进行区分。造成这种情况大部分都是因为使用了第三方修改过的系统版本或者对于系统优化过度,所以今天就来解决这个问题。 第一步:在开始菜单的搜索窗口输入“gpedit.msc”,进入组策略编辑器,依...

Windows7开机后出现黑一下屏性能降低

Windows7开机后出现黑一下屏性能降低

打开IE浏览器的时候、聊QQ的时候、玩游戏的时候… … 这到底是谁惹的祸呢? 很多人都知道Windows 7桌面特效全部开启会使系统性能降低,那到底是哪个特效导致的这一情况呢? 解决办法: 右键计算机,高级系统设置-性能-设置-关闭”任务栏和开始菜单使用动画“和”最大化和最小化动态显示窗口“...

解决windows 7无法将程序锁定到任务栏或附到开始菜单的方法

解决windows 7无法将程序锁定到任务栏或附到开始菜单的方法

出现该问题的原因是由于使用第三方优化软件消除快捷方式的小箭头引起的。 1、在开始搜索框中键入“regedit”,按回车键打开注册表编辑器。 2、依次定位到以下分支:HKEY_CLASSES_ROOTlnkfile。 3、在lnkfile项上鼠标右键单击“新建”——“字符串值”。...

windows 7系统中不能把程序锁定到任务栏的解决方法图文讲解

windows 7系统中不能把程序锁定到任务栏的解决方法图文讲解

最近小编在使用Windows 7的时侯遇到一个问题,就是应用程序和快捷方式不能锁定到任务栏,我当时不知道怎么回事,但是很多现有的方法都不能解决这个问题。现在我把我的解决的方法分享给大家以作参考。 问题分析 经过思考,初步判断出现该问题的原因是由于使用第三方优化软件消除快捷方式的小箭头引起的。...

windows 7 xp宋体 成功替换windows 7宋体为XP宋体的方法

windows 7 xp宋体 成功替换windows 7宋体为XP宋体的方法

很多朋友从XP升级迈入了Windows 7的殿堂,却发现,Windows 7确实好用和华丽,可是有一些地方不太适应。今天举出一则例子,是把Windows 7系统下的宋体替换为XP系统下的字体。这个并非无聊,大家去网上搜索下,就知道有多少人想要这么做了。 没办法,每人的需求总是那么的不同,好吧,怀旧...