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

  发布时间:2025-11-04 04:08:19   作者:玩站小弟   我要评论
数据库环境:SQL SERVER 2008R2需求如题,左图为初始数据,右图是已实现需求的数据展示简单说下我的实现思路1.按id、name排序给原始数据生成行号2.用递归判断上下行的id是否相等,** 。

   数据库环境: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, name, level )           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种,欢迎各位看官提出更多的解题方法。

(本文完)

服务器托管
  • Tag:

相关文章

  • TCL49E5700AUD(一览TCL49E5700AUD的创新功能与卓越性能,领略智能科技的魅力)

    摘要:在当今数字化时代,智能电视成为人们生活中不可或缺的娱乐和信息获取方式。TCL49E5700AUD作为TCL家族中的一员,凭借其卓越的性能和创新的功能,成为引领智能电视新潮流的佼佼者...
    2025-11-04
  • 物联网平台之数据平台

    对于物联网平台而言,基础是搭建IOT数据底座平台。IOT数据底座是指用于支撑物联网应用的数据存储和管理的基础设施。它通常由分布式存储系统、时序数据库集群和存储管理组件组成。分布式存储系统:用于集中存储
    2025-11-04
  • MQTT:一种用于物联网通信的轻量级协议

    在物联网(IoT)时代,一系列设备和传感器相互连接以共享数据并促进通信,对高效、轻量级消息传递协议的需求从未如此迫切。MQTT是消息队列遥测传输的缩写,已成为物联网通信的领先协议之一。本文将深入研究M
    2025-11-04
  • 智能电网:物联网预测维护指南

    在快速发展的能源领域,智能电网物联网应用正在推动一场深刻的变革,迈向更绿色、更可持续的未来。随着先进的可再生能源技术的发展,能源分配的方式正在发生革命性的转变。然而,伴随这些进步而来的是挑战,从多样化
    2025-11-04
  • OnePlus5手机(性能强劲,拍照出色,价格亲民,OnePlus5是你的不二选择)

    摘要:作为一款备受瞩目的手机品牌,OnePlus近年来凭借着出色的性能和优秀的拍照效果迅速赢得了用户的青睐。而其中最新推出的OnePlus5更是备受期待。究竟OnePlus5手机怎样?本...
    2025-11-04
  • 工业4.0中的数字孪生:连接物理世界和数字世界

    了解数字孪生作为工业4.0的核心,数字孪生是物理对象、系统或流程的虚拟副本。它们由三个关键组成部分组成:物理实体:代表现实世界的对象或系统,例如产品、机器或整个制造工厂。虚拟副本:反映物理实体的属性、
    2025-11-04

最新评论