sql server 中合并某个字段值的实例

有表如下:

如何获得如下结果:

解法

使用xml转换

代码如下:

代码如下:

CREATE TABLE body

(

ID int,

BODY nvarchar(20)

)

go

INSERT INTO body VALUES(1,'aaaa')

INSERT INTO body VALUES(2,'bbbb')

INSERT INTO body VALUES(1,'cccccc')

INSERT INTO body VALUES(3,'ddddd')

go

SELECT * FROM body

SELECT distinct a.ID,stuff((SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('')),1,1,'') ASBODY

FROM

body a

--具体思路是这样的:

SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('')

--这条语句的作用是按照a中的ID查找body表中ID=a.ID的所有记录,并把它转换成一个xml(关于将查询集转换成xml的文章,你可以去看看)

stuff((SELECT ','+BODY FROM body WHERE ID=a.ID FOR xml path('')),1,1,'')

--这条语句的作用是把生成的xml前面的一个逗号去掉并转化成标量值

--最后用一个distinct去掉重复的记录

(0)

相关推荐

  • sql server 中合并某个字段值的实例

    有表如下: 如何获得如下结果: 解法 使用xml转换 代码如下: 复制代码 代码如下: CREATE TABLE body ( ID int, BODY nvarchar(20) ) go INSERT INTO body VALUES(1,'aaaa') INSERT INTO body VALUES(2,'bbbb') INSERT INTO body VALUES(1,'cccccc') INSERT INTO body VALUES(3,'ddddd') go SELECT * FROM

  • 关于SQL Server中bit类型字段增删查改的一些事

    前言 本文主要给大家介绍了关于SQL Server中bit类型字段增删查改的一些事,话说BIT类型字段之前,先看"诡异"的一幕,执行Update成功,但是查询出来的结果依然是1,而不是Update的2 当别人问起我来的时候,本人当时也是处于懵逼状态的,后面联想具体的业务突然想起来这个字段是bit类型的 如果把这个现象跟BIT类型字段连续起来就不觉得奇怪了. 废话不多,直接上代码看结果就好了. 先建一个测试表 CREATE TABLE TestBIT ( Id INT IDENTITY(

  • SQL Server中使用sp_password重置SA密码实例

    SQL2000的SA密码不能更改的解决方法,在更改sa的密码出现下面的错误: 复制代码 代码如下: Error 21776: [SQL-DMO] The name 'dbo' was not found in the Users collection. If the name is a qualified name, use [] to separate various parts of the name, and try again. 解决方法:用SQl带的查询管理器连接到sql上,执行: 复

  • Oracle 实现类似SQL Server中自增字段的一个办法

    相关代码如下: 1. 创建sequence: 复制代码 代码如下: CREATE SEQUENCE SEQU_DATA_DATAINFO INCREMENT BY 1 START WITH 1 NOCYCLE NOCACHE NOORDER; 2. 创建触发器: 复制代码 代码如下: create or replace TRIGGER TRIG_TEST BEFORE INSERT ON TABLE1 FOR EACH ROW DECLARE tmpVar NUMBER; BEGIN tmpVa

  • 将Session值储存于SQL Server中

    一般情况下,我们喜欢使用Session储存我们的变量.Asp.Net提供了下面一些方法储存Session的值:  InProc  State Server  SQL Server  "InProc"表示我们使用传统ASP一样的方法储存Session的值,而且"State Server"则表示使用另外一台主机来储存Session的值.当然我们也能使用SQL Server储存值,我们这篇文章就专门用于讲解这种方法.  运行InstallSqlState.sql文件  首

  • SQL Server中数据行批量插入脚本的存储实现

    无意中看到朋友写的一篇文章"将表里的数据批量生成INSERT语句的存储过程的实现".我仔细看文中的两个存储代码,自我感觉两个都不太满意,都是生成的单行模式的插入,数据行稍微大些性能会受影响的.所在公司本来就存在第二个版本的类似实现,但是是基于多行模式的,还是需要手工添加UNAION ALL来满足多行模式的插入.看到这篇博文和基于公司数据行批量脚本的存储的缺点,这次改写和增强该存储的功能. 本存储运行于SQL Server 2005或以上版本,T-SQL代码如下: IF OBJECT_I

  • SQL Server中的执行引擎入门 图解

    本文旨在分类讲述执行计划中每一种操作的相关信息. 数据访问操作 首先最基本的操作就是访问数据.这既可以通过直接访问表,也可以通过访问索引来进行.表内数据的组织方式分为堆(Heap)和B树,其中表中没有建立聚集索引时数据是通过堆进行组织的,这个是无序的,表中建立聚集索引后和非聚集索引的数据都是以B树方式进行组织,这种方式数据是有序存储的.通常来说,非聚集索引仅仅包含整个表的部分列,对于过滤索引,还仅仅包含部分行. 除去数据的组织方式不同外,访问数据也分为两种方式,扫描(Scan)和查找(Seek)

  • 在SQL Server中实现最短路径搜索的解决方法

    开始这是去年的问题了,今天在整理邮件的时候才发现这个问题,感觉顶有意思的,特记录下来. 在表RelationGraph中,有三个字段(ID,Node,RelatedNode),其中Node和RelatedNode两个字段描述两个节点的连接关系:现在要求,找出从节点"p"至节点"j",最短路径(即经过的节点最少). 图1. 解析: 了能够更好的描述表RelationGraph中字段Node和 RelatedNode的关系,我在这里特意使用一个图形来描述,如图2. 图2

  • SQL Server中Check约束的学习教程

    0.什么是Check约束? CHECK约束指在表的列中增加额外的限制条件. 注: CHECK约束不能在VIEW中定义.CHECK约束只能定义的列必须包含在所指定的表中.CHECK约束不能包含子查询. 创建表时定义CHECK约束 1.1 语法: CREATE TABLE table_name ( column1 datatype null/not null, column2 datatype null/not null, ... CONSTRAINT constraint_name CHECK (

  • 在SQL SERVER中导致索引查找变成索引扫描的问题分析

    SQL Server 中什么情况会导致其执行计划从索引查找(Index Seek)变成索引扫描(Index Scan)呢? 下面从几个方面结合上下文具体场景做了下测试.总结.归纳. 1:隐式转换会导致执行计划从索引查找(Index Seek)变为索引扫描(Index Scan) Implicit Conversion will cause index scan instead of index seek. While implicit conversions occur in SQL Serve

随机推荐