English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
العنوان: دمج النصوص بناءً على حقل معين (دمج بسيط)
الوصف: دمج البيانات المقدمة بناءً على حقل 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 لدمج علامات الترقيم. آمل أن يكون هذا مفيدًا لكم.