一个朋友,碰到一个问题。

就是查询出来的结果集,需要每隔三行。就将这三行数据以此拼接为一行显示。起初我想着用ROW_NUMBER加CASE WHEN去做,发现结果并非我预期那样。

结果如下:

由于别人的数据,不方便显示。查询出来还是为三行数据,只是将其余部分展现出了空值。这种结果是不行的。

随后百度找到了,下面内容的百度经验。本想用这个数据集,以及语句贴上来。但还是因为不方便,就将那篇百度经验拿过来使用吧!

下面的百度经验是针对于两行数据进行的操作,多行数据也可以操作。

这里的左连接条件只需要写,下一行行数减一等于当前行数即可。以此类推

例:

FROM #tmpTest t1
LEFT JOIN #tmpTest t2 ON t1.RowNum = t2.RowNum - 1
LEFT JOIN #tmpTest t3 ON t2.RowNum = t3.RowNum - 1

这样数据依然会是三行,但他会将第二行的数据在第一行的数据后进行拼接,将第三行的数据在第二行后进行拼接。

假设你有三条数据,那么最终只需在查询结果中。针对于ROW_NUMBER排序后的行数进行取模拿到第一行便可得到你想要的数据。

RowNum % 3 = 1

有几行,便模于几。

以下便是百度经验内容:

SQL Server:按照数据库ROW_NUMBER()产生的行号,将相邻奇数行与偶数行拼接成一行。

思路:使用表 左自连接。

模拟数据源表结构,使用临时表

插入模拟数据

模拟按照Code栏位排序后生成 ROW_NUMBER() 行号

将两行数据合并成一行,奇数行号在左侧,偶数行号在右侧

模拟效果如下图所示

完整的模拟过程SQL如下:

 -- 模拟数据源表结构

   create table #test(

    Code varchar(50),

    Remark varchar(200)

   )

   -- 模拟数据

   insert into #test(Code, Remark) values('A', 'A Remark');

   insert into #test(Code, Remark) values('B', 'B Remark');

   insert into #test(Code, Remark) values('C', 'C Remark');

   insert into #test(Code, Remark) values('D', 'D Remark');

   -- 模拟按照Code栏位排序后生成行号

   select  ROW_NUMBER() over(order by Code) as RowNum, Code

             ,Remark

   into #tmpTest

   from #test

   order by Code

   -- 将两行数据合并成一行,奇数行号在左侧,偶数行号在右侧

   select test1.RowNum

             ,test1.Code

             ,test1.Remark

             ,test2.RowNum as RowNum2

             ,test2.Code AS Code2 

             ,test2.Remark AS Remark2

   from #tmpTest test1

   left join #tmpTest test2 on test1.RowNum = test2.RowNum -1 

                                        and test2.RowNum % 2 = 0

   where test1.RowNum % 2 =1

SQL Server 将两行或者多行拼接成一行数据的更多相关文章

  1. SQL Server中如何定位Row Lock锁定哪一行数据

    在SQL Server中有时候会使用提示(Hint)强制SQL使用行锁(Row Lock),前两天有个同事咨询了一个问题,如何定位Row Lock具体锁定了哪一行.其实这个问题只适合研究一下,实际意义 ...

  2. [原创]SQL 把表中某一个列按照逗号拼接成一行

    在我们开发的过程中,难免遇到一种场景,把某个表中的的某个列的值拼接成用逗号隔开的一行数据 如图:我们把UserId列拼接成一行数据 -------> 为此我写了一个存储过程来解决此类问题. -- ...

  3. 关于SQL Server将一列的多行内容拼接成一行的问题讨论

    http://blog.csdn.net/rolamao/article/details/7745972 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我 ...

  4. SQL Server将一列的多行内容拼接成一行的问题讨论

    转自http://blog.csdn.net/rolamao/article/details/7745972 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出 ...

  5. SQL Server将一列的多行内容拼接成一行

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name A ...

  6. 查询sql server 2008所有表和行数

    查询sql server 2008所有表和行数 SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.i ...

  7. SQL Server ->> 自动创建表并从文件加载数据

    这个存储过程自动创建表并从文件加载数据. 有一点需要说明的是Excel 12.0驱动是兼容了Excel 97-2003和Excel 2007两者格式的Excel文件. CREATE PROCEDURE ...

  8. SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)

    1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...

  9. sql server 使用链接服务器连接Oracle,openquery查询数据

      对接问题描述:不知道正式库oracle数据库账户密码,对方愿意在对方的客户端上输入账号和密码,但不告诉我们 解决方案:使用一台sql server作为中间服务器,可以通过转存数据到sql serv ...

随机推荐

  1. 概A第一章测试

    ·  问题 1√ 得 10 分,满分 10 分       A与B不能同时发生,表明A与B互不相容.               ·  问题 2× 得 10 分,满分 10 分       A与B互逆 ...

  2. Spring Cloud & Alibaba 实战 | 第十二篇: 微服务整合Sentinel的流控、熔断降级,赋能拥有降级功能的Feign新技能熔断,实现熔断降级双剑合璧(JMeter模拟测试)

    目录 一. Sentinel概念 1. 什么是Sentinel? 2. Sentinel功能特性 3. Sentinel VS Hystrix 二. Docker部署Sentinel Dashboar ...

  3. Rabbitmq 3.6.5以上版本修改端口号方法

    Rabbitmq 3.6.5以上版本修改端口号方法,网上查了下有一些方不管用,所以自己实践了引用官网说明 https://www.rabbitmq.com/configure.html#configu ...

  4. 关于CSS3背景渐变色无效问题

    无效的css[linear-gradient]写法 .loginbox{ background-color: linear-gradient(#D0D0D0, #E0E0E0, white); wid ...

  5. hdu4067 费用流(混合欧拉的宽展和延伸)

    题意:        给以一个图,每个有向边都有两个权值,a,b其中a是保留这条边的花费,b是删除这条边的花费,让你删去一些边使图满足一下要求: (1)只有一个起点和一个终点 (2)所有的边都是又向的 ...

  6. net -snmp 的监控策略

    yum install net-snmp net-snmp-utils -y vim /etc/snmp/snmpd.conf 最后添加:rocommunity nmap 192.168.1.0/24 ...

  7. <JVM下篇:性能监控与调优篇>补充:浅堆深堆与内存泄露

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  8. C++ primer plus读书笔记——第7章 函数——C++的编程模块

    第7章 函数--C++的编程模块 1. 函数的返回类型不能是数组,但可以是其他任何一种类型,甚至可以是结构和对象.有趣的是,C++函数不能直接返回数组,但可以将数组作为结构或对象的组成部分来返回. 2 ...

  9. OO第一单元总结-多项式求导

    OO第一单元总结-多项式求导 一.第一.第二次作业总结 因为前两次作业设计复杂度差别不大,因而放在这里统一总结. 基于度量分析程序结构: 前两次作业确实存在缺乏可拓展设计的构想,基本还是面向过程的思维 ...

  10. 原生JS和jQuery创建元素的方法

    jQ创建元素的方法 1.原生代码 .creatElement('tr')` .innerHTML = '<h1>加油</h1>' document.write('<h1& ...