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 ...
随机推荐
- 【.NET 与树莓派】数模转换
在开始之前,需要说明一对很耳熟的概念--数字信号 & 模拟信号. 这些概念的理论有些复杂,你如果相当有兴趣,可以找来有关的文献细细研究:若你不关心那是啥只想知道咋用,那就通俗但不庸俗地理解一下 ...
- PAT归纳总结——关于模拟类问题的一些总结
关于时间的模拟问题 在刷题的过程中碰到了一些关于时间先后顺序的模拟题目,刚开始做的时候确实挺麻烦的,今天把这类问题的解题思路来整理一下. 比较典型的有: 1017 Queueing at Bank 1 ...
- 077 Kuchiguse
The Japanese language is notorious for its sentence ending particles. Personal preference of such pa ...
- php文件夹下文件批量重命名
php文件夹下文件批量重命名 <?php header("Content-type:text/html;charset=utf-8"); $dir = __DIR__.'./ ...
- hdu3715 二分+2sat+建图
题意: 给你一个递归公式,每多一层就多一个限制,问你最多能递归多少层. 思路: 先分析每一层的限制 x[a[i]] + x[b[i]] != c[i],这里面x[] = 0,1, ...
- hdu4302 set或者线段树
题意: 一条蛇生活在一个管子里,然后管子上面的某些位置会一次出现食物,每次蛇都会吃最近的食物,吃完之后就原地不动,等待下一次吃食物,如果有两个食物距离蛇一样远并且都是最近的,那么蛇不会掉头 ...
- Windows Pe 第三章 PE头文件(下)
3.5 数据结构字段详解 3.5.1 PE头IMAGE_NT_HEADER的字段 1.IMAGE_NT_HEADER.Signature +0000h,双字.PE文件标识,被定义为00004550 ...
- 如何在jQuery的Ajax调用后管理一个重定向请求
1 success:function(data){ 2 if(data.xx == "xx") 3 { 4 //code... 5 window.location.href =&q ...
- 使用乌龟Git连接github
之前自己是在Gitee+乌龟Git来进行管理项目,因为特殊的需求,需要再Github+乌龟Git来进行管理项目,这盘博客主要讲解的就是这个. 安装环境 Git 安装参考链接:https://www.c ...
- 阿里云短信服务 PHP
1.开通短信服务后,进入控制器->短信服务 2.点击国内消息,配置签名,模板(这里不作详细介绍) 3.点击进入左侧帮助文档里面,找到PHP sdk,Composer命令直接安装 4.获取acce ...