SQL将两条相似的数据合并为一条数据?

kart15 2011-05-17 10:21:49
有这样两条数据 表A

UserName UID CaseType PersonName FileNo CaseID
葛文珠 345 人身侵权 李贵 粤晖第0506 13
葛文珠 345 人身侵权 李西西 粤晖第0506 13

我想查询的结果是
UserName UID CaseType PersonName PersonName2 FileNo CaseID
葛文珠 345 人身侵权 李西西 李贵 粤晖第0506 13

请问这条SQL该怎么写?
...全文
1219 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
nayc 2011-05-17
  • 打赏
  • 举报
回复
我来个简单点的
create table tb(UserName varchar(20), UID int, CaseType varchar(20), PersonName varchar(20), FileNo varchar(20),CaseID int)
insert into tb values('葛文珠',345, '人身侵权','李贵','粤晖第0506',13)
insert into tb values('葛文珠',345, '人身侵权','李西西','粤晖第0506',13)


select top 1 a.*,b.PersonName as PersonName2 from tb a
left join tb b on a.uid=b.uid and a.casetype=b.casetype and a.CaseID=b.CaseID and a.personName != b.personName

drop table tb
laowang134 2011-05-17
  • 打赏
  • 举报
回复
额!~你的意思是按照UID合并PersonName了!~?
/*
标题:按某字段合并字符串之一(简单合并)
作者:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)
时间:2008-11-06
地点:广东深圳

描述:将如下形式的数据按id字段合并value字段。
id value
----- ------
1 aa
1 bb
2 aaa
2 bbb
2 ccc
需要得到结果:
id value
------ -----------
1 aa,bb
2 aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)
*/
--1、sql2000中只能用自定义的函数解决
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

create function dbo.f_str(@id varchar(10)) returns varchar(1000)
as
begin
declare @str varchar(1000)
select @str = isnull(@str + ',' , '') + cast(value as varchar) from tb where id = @id
return @str
end
go

--调用函数
select id , value = dbo.f_str(id) from tb group by id

drop function dbo.f_str
drop table tb


--2、sql2005中的方法
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

select id, [value] = stuff((select ',' + [value] from tb t where id = tb.id for xml path('')) , 1 , 1 , '')
from tb
group by id

drop table tb


--3、使用游标合并数据
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go
declare @t table(id int,value varchar(100))--定义结果集表变量
--定义游标并进行合并处理
declare my_cursor cursor local for
select id , value from tb
declare @id_old int , @id int , @value varchar(10) , @s varchar(100)
open my_cursor
fetch my_cursor into @id , @value
select @id_old = @id , @s=''
while @@FETCH_STATUS = 0
begin
if @id = @id_old
select @s = @s + ',' + cast(@value as varchar)
else
begin
insert @t values(@id_old , stuff(@s,1,1,''))
select @s = ',' + cast(@value as varchar) , @id_old = @id
end
fetch my_cursor into @id , @value
END
insert @t values(@id_old , stuff(@s,1,1,''))
close my_cursor
deallocate my_cursor

select * from @t
drop table tb
kart15 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nayc 的回复:]
UserName UID CaseType PersonName FileNo CaseID
葛文珠 345 人身侵权 李贵 粤晖第0506 13
葛文珠 345 人身侵权 李西西 粤晖第0506 13

----------------
我估计LZ的意思是(假设,葛文珠(UID=345)律师办理的案件中,被告/原告中的人有2个(李贵、李西西)),原先设计的时候一个当事人一条记录,现在合……
[/Quote]
兄弟爱死你了,
F546445693 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nayc 的回复:]
UserName UID CaseType PersonName FileNo CaseID
葛文珠 345 人身侵权 李贵 粤晖第0506 13
葛文珠 345 人身侵权 李西西 粤晖第0506 13

----------------
我估计LZ的意思是(假设,葛文珠(UID=345)律师办理的案件中,被告/原告中的人有2个(李贵、李西西)),原先设计的时候一个当事人一条记录,现在合……
[/Quote]
这还有点眉目。。。哈哈哈
kart15 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 nayc 的回复:]
UserName UID CaseType PersonName FileNo CaseID
葛文珠 345 人身侵权 李贵 粤晖第0506 13
葛文珠 345 人身侵权 李西西 粤晖第0506 13

----------------
我估计LZ的意思是(假设,葛文珠(UID=345)律师办理的案件中,被告/原告中的人有2个(李贵、李西西)),原先设计的时候一个当事人一条记录,现在合……
[/Quote]
YES 加十分!对啦
nayc 2011-05-17
  • 打赏
  • 举报
回复
UserName UID CaseType PersonName FileNo CaseID
葛文珠 345 人身侵权 李贵 粤晖第0506 13
葛文珠 345 人身侵权 李西西 粤晖第0506 13

----------------
我估计LZ的意思是(假设,葛文珠(UID=345)律师办理的案件中,被告/原告中的人有2个(李贵、李西西)),原先设计的时候一个当事人一条记录,现在合并一个律师在一个案件中所有的当事人(最大2个人)

请问LZ是这个意思吗
kart15 2011-05-17
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 laowang134 的回复:]
合并的标准是什么?根据哪个字段合并,合并哪个字段。
[/Quote]
我都写明了哦!

有这样两条数据 表A

UserName UID CaseType PersonName FileNo   CaseID
葛文珠  345 人身侵权   李贵    粤晖第0506  13
葛文珠  345 人身侵权   李西西   粤晖第0506  13

我想查询的结果是
UserName UID CaseType PersonName PersonName2  FileNo  CaseID
葛文珠   345 人身侵权   李西西    李贵    粤晖第0506  13
haojuntu 2011-05-17
  • 打赏
  • 举报
回复
像这样的问题,插入数据的时候判断一下,类似的不插入数据库。
laowang134 2011-05-17
  • 打赏
  • 举报
回复
合并的标准是什么?根据哪个字段合并,合并哪个字段。
F546445693 2011-05-17
  • 打赏
  • 举报
回复
需求不明确
相似是怎么个相似法,描述清楚些。。。
表的结构又是怎样,也说的具体点,
这样可能会好点

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧