SQL 拼接多个字段的值&一个字段多条记录的拼接

如student表:


studentID


studentName


studentScore


01


Alice


90


02


Bill


95


03


Cindy


100

一、拼接多个字段的值

select studentID+‘-’+studentName+‘-‘+studentScore AS studentInfo from student

结果:

二、一个字段多条记录的拼接

select stuff((select ‘|‘+studentName from student for xml path (‘‘)),1,1,‘‘)

结果:

解析:

①stuff:
1、作用
stuff(param1, startIndex, length, param2)
将param1中自startIndex(SQL中都是从1开始,而非0)起,删除length个字符,然后用param2替换删掉的字符。

2、参数
param1
一个字符数据表达式。param1可以是常量、变量,也可以是字符列或二进制数据列。
startIndex
一个整数值,指定删除和插入的开始位置。如果 startIndex或 length 为负,则返回空字符串。如果startIndex比param1长,则返回空字符串。startIndex可以是 bigint 类型。
length 
一个整数,指定要删除的字符数。如果 length 比param1长,则最多删除到param1 中的最后一个字符。length 可以是 bigint 类型。

3、返回类型
如果param1是受支持的字符数据类型,则返回字符数据。如果param1是一个受支持的 binary 数据类型,则返回二进制数据。
4、备注
如果结果值大于返回类型支持的最大值,则产生错误。

②for xml path:

for xml path有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。

来源:http://blog.csdn.net/rolamao/article/details/7745972

时间: 2024-10-29 11:33:51

SQL 拼接多个字段的值&一个字段多条记录的拼接的相关文章

SQL语句:一个表,通过一个字段查找另外一个字段不相同值

select * from [dbo].[Sys_MemberKey] a where exists(select * from [Sys_MemberKey] b where a.FMachineCode<>'' and a.FKeyID=b.FKeyID and a.FMemberID<>b.FMemberID) 一个相同的表根据一个字段,查找另外一个字段不相同值,经测试可用

sql 多个字段排序,头一个字段排序完,再对第二个字段进行排序(以此类推)

现根据num排序,num数字相同的根据时间进行排序,都是降序DESC SELECT * FROM counts ORDER BY num DESC,create_time DESC

ACCESS中通过一个字段更新另一个字段

搞了好久的一个问题终于有结果…… 根据学生进出馆的次数和学生报名人数来分配自习间 学生报名是通过工号(学号)来报名的: 而门禁系统统计出来的数据有绝一大部分仅有 卡号没有 工号和姓名, 即便统计出来也不准啊: 各种问,各种找, 问财务,说给的卡号没有问题, 问门禁管理人员,说搞好了给我电话, 搞好几天也没有给我打电话, 据说是简单的看了下没有搞明白,当时一同事在那看见了 就这光导出日志就花了NN久.(门禁是office 2003)每次只能导60000条数据,还要等10导一次, 中间再死几次机,我

将多个值保存到一条记录里

select   staffId,  (SELECT MachineIP+ ','  FROM STAFF_ATTENDANCE r WHERE r.staffId= 55 FOR XML PATH('') )   gg from STAFF_ATTENDANCE a  group by a.staffId

Sqlserver 查询一个字段里不同值的最新一条记录

查询用户编号为1165的所有数据: select * from T_JianKangJC_JianCeSJ where JianCeCSID in (19,7,1,2,20,15) and YongHuID='1165' order by JianCeID desc 查询用户编号为1165且监测参数为(1,2,7,15,19,20)的数据: select * from T_JianKangJC_JianCeSJ a where exists( select * from ( select Jia

SQL:多表关联取最大日期的那条记录

作者:iamlasong 1.需求 两个表,投递记录表和封发开拆记录表,现在想知道投递日期距最后一次封发日期天数分布情况. 对这个需求,需要先查询出投递明细,同时要知道对应的邮件最后一次封发情况,如机构.日期等 2.明细查询 考虑到一天可能封发多次,所以取日期和时间都是最大的那条,语句如下: select * from tb_evt_bag_mail_rela a,tb_evt_dlv c , tb_jg d where a.mail_num=c.mail_num and a.bag_actn_

MySQL 批量修改某一列的值为另外一个字段的值

mysql> select * from fruit; +----+--------+-------+ | id | name | price | +----+--------+-------+ | 1 | apple | 0 | | 2 | banana | 0 | | 3 | orange | 0 | | 4 | mango | 0 | | 5 | pomelo | 0 | +----+--------+-------+ 5 rows in set (0.00 sec) 要求很简单,将上面f

Oracle通过一个字段的值将一条记录拆分为多条记录

前言 之前遇到了一次这样的需求,当时没有记录,这一次又赶上了,简单的记录一下. 本文个人拙见,若有出入,请指出--来自菜的颤抖 场景 表A中存放了集装箱的信息,一个集装箱一条记录,表B中存放了对于集装箱操作的指令,一条指令包括多个集装箱箱号,通过分号;切割(TCIU2347687;XUTR3546865),现在的需求是,对于已经在指令表B中的集装箱,在查询表A时需要过滤掉. 很容易想到的是not in, 然而分号分割. 其次,not like,然而[Err] ORA-01427: 单行子查询返回

oracle中如何更改一个表的一个字段属性(名称,类型)

修改字段的属性,名称方法 --修改某一个字段的类型,当该字段不为null时 ALTER TABLE 表名 ADD  字段 NUMBER(11,0) ; --新创建一列,期待的字段类型 UPDATE 表名 SET 字段_bak= 字段;COMMIT; --复制旧字段值到新字段,dml的都需要提交 ALTER TABLE 表名DROP COLUMN 字段;--删除掉旧字段 ALTER TABLE 表名RENAME COLUMN 字段_bakTO 字段;--修改新字段的名称 alter table 表