SQL Server 将两行或者多行拼接成一行数据
一个朋友,碰到一个问题。
就是查询出来的结果集,需要每隔三行。就将这三行数据以此拼接为一行显示。起初我想着用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 将两行或者多行拼接成一行数据的更多相关文章
- SQL Server中如何定位Row Lock锁定哪一行数据
在SQL Server中有时候会使用提示(Hint)强制SQL使用行锁(Row Lock),前两天有个同事咨询了一个问题,如何定位Row Lock具体锁定了哪一行.其实这个问题只适合研究一下,实际意义 ...
- [原创]SQL 把表中某一个列按照逗号拼接成一行
在我们开发的过程中,难免遇到一种场景,把某个表中的的某个列的值拼接成用逗号隔开的一行数据 如图:我们把UserId列拼接成一行数据 -------> 为此我写了一个存储过程来解决此类问题. -- ...
- 关于SQL Server将一列的多行内容拼接成一行的问题讨论
http://blog.csdn.net/rolamao/article/details/7745972 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我 ...
- SQL Server将一列的多行内容拼接成一行的问题讨论
转自http://blog.csdn.net/rolamao/article/details/7745972 昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出 ...
- SQL Server将一列的多行内容拼接成一行
昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes ep_name A ...
- 查询sql server 2008所有表和行数
查询sql server 2008所有表和行数 SELECT a.name, b.rows FROM sysobjects AS a INNER JOIN sysindexes AS b ON a.i ...
- SQL Server ->> 自动创建表并从文件加载数据
这个存储过程自动创建表并从文件加载数据. 有一点需要说明的是Excel 12.0驱动是兼容了Excel 97-2003和Excel 2007两者格式的Excel文件. CREATE PROCEDURE ...
- SQL SERVER 使用BULK Insert将txt文件中的数据批量插入表中(1)
1/首先建立数据表 CREATE TABLE BasicMsg( RecvTime FLOAT NOT NULL , --接收时间,不存在时间相同的数据 AA INT NOT NULL, --24位地 ...
- sql server 使用链接服务器连接Oracle,openquery查询数据
对接问题描述:不知道正式库oracle数据库账户密码,对方愿意在对方的客户端上输入账号和密码,但不告诉我们 解决方案:使用一台sql server作为中间服务器,可以通过转存数据到sql serv ...
随机推荐
- Java基础(面试复习整理)
基础知识和语法 Java语言初识 计算机语言发展 机器语言.汇编.C.C++.Java Java的诞生与发展 1995 JavaSE JavaME Android JavaEE 2006(大数据) H ...
- 软件篇-01-为Jetson TX2扫清科研的障碍
建议用vryL,GUI界面,功能更全,支持订阅. https://github.com/ShieldQiQi/vryLgithub.com 下面的内容不用看了,除非你更喜欢命令行界面. To r ...
- Nginx隐藏式跳转(浏览器URL跳转后保持不变) - 运维笔记
Nginx的隐藏式跳转可以实现将请求跳转到另一个网站的页面,并且浏览器中URL保持不变.Nginx配置中需要使用rewrite规则.下面提供两个示例来说明这种跳转需求的配置: 一.配置示例1将请求路径 ...
- 【Nginx(五)】Nginx配置Https证书
大致的流程如下 1.申请Https证书,绑定域名信息; 由于自己的服务器是腾讯云服务器, 这里就在腾讯云上申请SSL证书, 申请地址: https://console.cloud.tencent.co ...
- 【责任链模式】责任链模式结合Spring实战Demo
备注: 责任链与策略模式有很多相似之处,如都是行为型设计模式,都能够处理代码中的if-else逻辑 主要区别在于: 策略模式 封装了算法,通过上下文对象去接受客户端的数据,根据数据类型执行不同的算法 ...
- HTTP自定义Header-(SOCKET-TCP)
HTTP自定义Header-TCP 前几天弄一些东西,需要在发送http请求的时候自定义http头,找了几个库用着很不爽.有的把Cookie直接干掉了,还自己在头里加了版权,最后终于忍不了了.在网 ...
- Day002 编译型和解释型语言
编译型和解释型语言 原文链接 编译型(Compile) 用编译型语言写的程序执行之前,需要一个专门的编译过程,针对特定的平台,使用专门的编译器,把高级语言翻译成机器语言,以后直接运行而不需要再编译了, ...
- 【Web前端HTML5&CSS3】03-字符实体与语义标签
笔记来源:尚硅谷Web前端HTML5&CSS3初学者零基础入门全套完整版 目录 字符实体与语义标签 1. 字符实体 2. meta标签 3. 语义标签 4. 块元素与行内元素 块元素(bloc ...
- 玩转直播系列之RTMP协议和源码解析(2)
一.背景 实时消息传输协议(Real-Time Messaging Protocol)是目前直播的主要协议,是Adobe公司为Flash播放器和服务器之间提供音视频数据传输服务而设计的应用层私有协议. ...
- SE_Work0_回顾与展望
项目 内容 课程:北航-2020-春-软件工程 博客园班级博客 要求:阅读推荐博客并回答问题 热身作业阅读部分要求 我在这个课程的目标是 提升团队管理及合作能力,开发一项满意的工程项目 这个作业在哪个 ...