PDA

View Full Version : جمع فیلد رکوردهای غیر عددی



کیوان رحیمی
سه شنبه 16 شهریور 1389, 17:09 عصر
من میخوام فیلد نام چند رکورد را با هم جمع کنم که نتیجه دستورم بشه مثل این
علی/صحمد /رامین یعنی یک رکورد برگردونه چه کا باید بکنم فوری

بهزادصادقی
سه شنبه 16 شهریور 1389, 22:00 عصر
امیدوارم این نمونه کمکت بکنه:



if object_id( 'dbo.MyTable' ) is not null
drop table dbo.MyTable;
go

create table dbo.MyTable
(
id int identity(1,1) primary key,
FirstName nvarchar(100),
LastName nvarchar(100),
Age int
);

insert dbo.MyTable (FirstName, LastName, Age ) values ( N'Kayvan', N'Rahimi', 24 );
insert dbo.MyTable (FirstName, LastName, Age ) values ( N'Behzad', N'Sadeghi', 47 );
insert dbo.MyTable (FirstName, LastName, Age ) values ( N'Maysam', N'Bidabadi', 32 );
insert dbo.MyTable (FirstName, LastName, Age ) values ( N'Mehri', N'Jeyhoon', 15 );
insert dbo.MyTable (FirstName, LastName, Age ) values ( N'Ziba', N'Bikalam', 53 );
insert dbo.MyTable (FirstName, LastName, Age ) values ( N'Saba', N'Ettehad', 5 );

select
t.FirstName + ' / '
from
dbo.MyTable t
where
t.Age < 50
for xml path('');

Rejnev
سه شنبه 16 شهریور 1389, 22:37 عصر
امیدوارم این نمونه کمکت بکنه
سلام میشه توضیح بدی چی نوشتی؟
For xml path چیه؟

بهزادصادقی
سه شنبه 16 شهریور 1389, 22:57 عصر
سلام میشه توضیح بدی چی نوشتی؟
For xml path چیه؟

for xml یک جمله است که شما می توانید به هر select ای اضافه کنید. کاربرد معمولی آن این است که به SQL Server دستور می دهد که مجموعه نتایج این query را، به جای اینکه به صورت یک مجموعه معمولی به ما برگرداند، آنها را در قالب یک XML document در آورد و آن xml را به ما باز گرداند.

استفاده از for xml معمولا فوق العاده پیچیده می باشد. من چند بار که سعی کرده ام از آن استفاده کنم، بعد از یکی دو ساعت بازی با آن، سرم گیج رفته.

ولی یکی از گزینه های آن، هم syntax خیلی ساده ای دارد، و هم یک کاربرد فوق العاده جالب و به درد به خوری.

هر وقت شما کلمات ('')for xml path را به آخر یک select که فقط یک ستون دارد اضافه می کنید، SQL Server می آید و رشته های کل آن سطر ها را به آخر هم وصل می کند و یک رشته که برابر است با جمع کل آنهاست باز می گرداند! و هیچ نشانی هم از xml دیده نمی شود.

معلوم نیست Microsoft جرا این قابلیت را به وجود آورد. ولی جند سال پیش، یک نفر که داشت با for xml بازی می کرد، متوجه این مسئله شد و به این فکر افتاد که می شود از این فابلیت استفاده کرد که یک مسئله قدیمی سخت و پرهزینه (از لحاظ عملکرد) را در SQL Server حل کرد. و آن همان مسئله جمع کردن یک سری رشته از سطر های مختلف جدول می باشد. برای یک چنین کاری، معمولا خیلی ها از یک cursor استفاده می کنند. ولی cursor عملکرد کد را به صورت باور نکردنی وحشتناکی می آورد پائین. xml for path این توانایی را به ما می دهد که این نوع مسائل را بدون استفاده از cursor و با سرعت خیلی بالای حل کنیم.

بعد از کشف این نکته، آن شخصی که این مسئله را کشف کرده بود این مطلب را در تالار های بحث SQL Server مثل همین تالار مطرح کرد، و بعد از مدت نسبتا کوتاهی این تکنیک بسیار در جهان SQL Server معروف و متداول گردید.

behrouzlo
چهارشنبه 17 شهریور 1389, 10:07 صبح
می شه یک متغییر به شکل زیر تعریف کرد و به جواب رسید:


Declare @Str Nvarchar(Max) = ''
select
@Str = @Str + t.FirstName + ' / '
from
dbo.MyTable t
where
t.Age < 50

Select @Str

farzad_itc
چهارشنبه 04 اسفند 1389, 18:00 عصر
سلام
مورد من این هسنش که من می خوام دو تا رشته رو از دو table جدا از هم که با یک کلید به هم متصل هستند انتخاب کنم.

بعنوان مثال :

علی = مرد /محمد = مرد / مریم = زن

که این مرد یا زن ها از table جنسیت می آیند. و کد آنها در table مشخصات (علی/صحمد /رامین) قرار دارد.

لطفاً راهنمایی نمایید.