English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

جملة SQL لدمج الأعمدة في التجميع حسب حقل معين (دمج بسيط)

العنوان: دمج النصوص بناءً على حقل معين (دمج بسيط)


الوصف: دمج البيانات المقدمة بناءً على حقل 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 int) 
returns varchar(100)
as
begin
declare @str varchar(1000) 
set @str='' select @str=@str+''+cast(value as varchar) 
from tb where id = @id 
set @str=right(@str , len(@str) - 1) 
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

هذا هو شرح حول جملة SQL لدمج علامات الترقيم. آمل أن يكون هذا مفيدًا لكم.

أعجبك ذلك