2 xwh1314 xwh1314 于 2018.07.11 17:02 提问

sqlserver 多条记录合并 5C
 id rq                fjname
1   2018-07-10   a.doc
2   2018-07-10   b.doc

id  rq                  fjname
1   2018-07-10   a.doc;b.doc

表中两条记录只有附件名称不同,
现在需要把日期一样的记录合并一下,
附件名称之间用分号隔开

只要sql 不要存储过程

10个回答

showbo
showbo   Ds   Rxr 2018.07.11 17:13

stuff+group by,然后将结果insert到其他表

https://www.cnblogs.com/ggll611928/p/6438737.html

caozhy
caozhy 正解!
2 个月之前 回复
qq_37139773
qq_37139773   2018.07.11 17:08

--1

create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into T1 (UserID,UserName,CityName) values (5,'e','上海')
go

CREATE FUNCTION dbo.f_str(@id nvarchar(50))
RETURNS nvarchar(4000)
AS
BEGIN
DECLARE @r nvarchar (4000)
SET @r=''
SELECT @r=@r+','+ UserName FROM T1 WHERE CityName=@id
RETURN STUFF(@r, 1, 1, '')
END
GO
-- 调用函数
SELECt CityName, value = dbo.f_str(CityName) FROM T1 GROUP BY CityName
drop table T1
drop function dbo.f_str

--2

create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into T1 (UserID,UserName,CityName) values (5,'e','上海')
go
create function f_hb (@id nvarchar(50))
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str= @str+','+cast(UserName as varchar) from T1 where CityName =@id
set @str=right(@str , len(@str) -1)
return(@str)
End
go

--调用自定义函数得到结果:
select distinct CityName ,dbo.f_hb(CityName) as value from T1
drop table T1
drop function dbo.f_hb

--3

DECLARE @T1 table(UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into @T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into @T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into @T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into @T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into @T1 (UserID,UserName,CityName) values (5,'e','上海')

SELECT B.CityName,UserList FROM (
SELECT CityName,
UserList=stuff((SELECT ','+UserName FROM @T1 WHERE CityName=A.CityName FOR XML PATH('')), 1 , 1 , '')

FROM @T1 A
GROUP BY CityName
) B

--4

create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50));
insert into T1 (UserID,UserName,CityName) values (1,'a','上海')
insert into T1 (UserID,UserName,CityName) values (2,'b','北京')
insert into T1 (UserID,UserName,CityName) values (3,'c','上海')
insert into T1 (UserID,UserName,CityName) values (4,'d','北京')
insert into T1 (UserID,UserName,CityName) values (5,'e','上海')

-- 查询处理
SELECT * FROM(SELECT DISTINCT CityName FROM T1) A
OUTER APPLY(
SELECT[value]=STUFF(REPLACE(REPLACE(
(
SELECT UserName FROM T1 N
WHERE N.CityName = A.CityName
FOR XML AUTO
), '', ''), 1, 1, '')
)n

qq285679784
qq285679784   2018.07.11 17:13

图片说明

qq285679784
qq285679784   2018.07.11 17:13

图片说明

qq_39636244
qq_39636244   2018.07.11 17:21
weixin_42671477
weixin_42671477 谢谢
2 个月之前 回复
qq_41802565
qq_41802565   2018.07.11 18:03

使用stuff+group by实现

--测试数据
select '2018-07-10' as rq,'a.doc' as fjname
into #dt
union all
select '2018-07-10','b.doc'
union all
select '2018-07-11','c.doc'
union all
select '2018-07-12','d.doc'

--实现语句
select rq, [values]=stuff((select ';'+fjname from #dt t where rq=#dt.rq for xml path('')), 1, 1, '') from #dt group by rq

--删除临时表
drop table #dt

yyxreader
yyxreader   2018.07.11 18:07
weixin_42671477
weixin_42671477 谢谢
2 个月之前 回复
cyueyong
cyueyong   2018.07.12 11:12

select distinct rq,(select distinct(fjname)+';' from 表名 for xml path('')) as fjname

from 表名 a

cyueyong
cyueyong   2018.07.12 11:14

select distinct rq,(select distinct(fjname)+';' from 表名 where rq=a.rq for xml path('')) as fjname

from 表名 a

qq285679784
qq285679784   2018.07.11 17:10

图片说明

使用stuff+group by实现

--测试数据
select '2018-07-10' as rq,'a.doc' as fjname
into #dt
union all
select '2018-07-10','b.doc'
union all
select '2018-07-11','c.doc'
union all
select '2018-07-12','d.doc'

--实现语句
select rq, [values]=stuff((select ';'+fjname from #dt t where rq=#dt.rq for xml path('')), 1, 1, '') from #dt group by rq

--删除临时表
drop table #dt

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
Sqlserver 多条记录合并 转载整理
--1 create table T1 (UserID int , UserName nvarchar(50),CityName nvarchar(50)); insert into T1 (UserID,UserName,CityName) values (1,'a','上海') insert into T1 (UserID,UserName,CityName) values (2,'b'
sqlserver中将几条数据合并为一条数据
sqlserver中将几条数据合并为一条数据
sqlserver 将一个字段下的多行语句合并成一条数据
select 名称 = ( stuff( (select ',' + CAST(字段名AS VARCHAR) from 表名 where 条件 for xml path('')), 1, 1, '' ) )
sql语句实现多条数据合为一条数据
今天遇到个函数感觉很有用,给你们举个例子吧: 当我们给用户多个角色的时候,我们的用户角色表的展示方式有两种, 一种是把所有角色何在一起变成一个字符串,然后在该表查看用户就能看到一条关于用户角色的数据 另一种就是插入多条数据,一个用户一个角色,然后再对同一个用户insert一个角色,也就是当查询一个用户的时候,返回的是多条数据 个人感觉返回多条的数据这种方式便于数据库管理,但是如果在前台展示
sqlserver 多行合并
FOR XML PATH 有的人可能知道有的人可能不知道,其实它就是将查询结果集以XML形式展现,有了它我们可以简化我们的查询语句实现一些以前可能需要借助函数活存储过程来完成的工作。那么以一个实例为主.         一.FOR XML PATH 简单介绍              那么还是首先来介绍一下FOR XML PATH ,假设现在有一张兴趣爱好表(hobby)用来存放兴趣爱
sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用)
sqlserver中 多条数据合并成一条数据 (stuff 与 for xml path 连用) SQL Server 中的 STUFF 函数的使用: STUFF ( character_1 , start , length ,character_2 ) 作用:将character_1中自start(SQL中都是从1开始,而非0)起,删除length个长度的字符,然后用character_2替换删掉的字符。 character_1:一个字符数据表达式。character_1可以是常量、变
sql合并多行记录
MySQL 使用关键字 group_concat,具体示例如下: select stuID, group_concat(borrowId) as dd from t_borrow SqLServer select companyIds = ( stuff( (select ',
如何用一条SQL语句,将多条记录(一个字段)合并为一个?
例如:table字段为:tableID(nchar)查询结果为不确定的多条:tableIDT1T2T3T4……如何用一条SQL语句将这些记录合并为一个字段,值为:T1T2T3……create table t(tableid nchar(30))insert tselect T1 union allselect T2 union allselect T3 union allselec
SQL Server中将多行数据拼接为一行数据(一个字符串)
转载自:http://blog.sina.com.cn/s/blog_63c31d660101obov.html 方法一: 使用T-SQL DECLARE @Users NVARCHAR(MAX) SET @Users = ”SELECT @Users = @Users + ‘,’ + UserName FROM dbo.[User] WHERE RoleID = 1SELECT @User
两条记录合并一条的 sql
select          eu.ID, eu.UID, eu.ID_NO, eu.USER_NICK, eu.USER_NAME, eu.PWD_DIGEST, eu.PWD_SALT, eu.SEX,EMAIL, eu.PHONE, eu.STATUS, eu.USER_TYPE, eu.REG_SRC_ID, eu.USER_LOC, eu.GMT_BIRTH,