View Full Version : پیدا کردن ماکسیمم مقدار در هر رکورد در بین 200 فیلد
saeed6162
یک شنبه 06 مرداد 1392, 12:31 عصر
سلام و خسته نباشید
جدولی هست با 200 فیلد عددی که نامگذاری اونها به اینصورته :
(n1 int, n2 int, ... ,n200 int)
جدول خروجی باید به اینصورت باشه که هر ردیف اون دارای یک مقدار باشه که اون هم ماکسیمم مقدار در اون رکورد بین این 200 تا فیلده.
نکته : اگه تابعی وجود داره که مستقیماً این مقدار رو پیدا می کنه مد نظر نیست و لازمه که با پیمایش همه فیلدها این مقدار پیدا بشه
از sql 2012 هم استفاده می کنم
ممنونم از شما
tooraj_azizi_1035
یک شنبه 06 مرداد 1392, 13:24 عصر
این کد: (برای ردیف 5 ستونه)
Create Table #sample (
[col1] int ,
[col2] int ,
[col3] int ,
[col4] int ,
[col5] int
);
Insert Into #sample Values('0','7','9','3','4');
Insert Into #sample Values('5','6','10','8','1');
--Solution
select *, Row_Number() Over (Order By getdate()) Rid into #temp From #sample
Declare @Cols as Varchar(max)
Set @Cols=''
select @Cols = @Cols + ',[' + name + ']' from
tempdb..syscolumns where id=object_id('tempdb..#temp')
and name <> 'Rid'
Select @Cols = Right(@Cols,len(@Cols)-1)
exec ('Select Rid,Max(val) maxval from #temp t
Unpivot(val For data in (' + @Cols + ')) as Upvt
Group by Rid')
Drop table #temp
Drop table #sample
منبع: http://social.msdn.microsoft.com/Forums/sqlserver/en-US/007764d0-4a2d-4227-a4db-21fce471fbb3/how-to-get-max-value-from-a-row
البته میشد یک CLR Function نوشت و به راحتی هر ردیف رو به شکل یک آرایه دید و با متد Max() مقدار اون رو برگردوند.
برای 200 ستون هم می تونید با حلقه SQL String رو بسازید و اون رو با EXEC اجرا کنید.
محمد سلیم آبادی
یک شنبه 06 مرداد 1392, 19:07 عصر
نکته : اگه تابعی وجود داره که مستقیماً این مقدار رو پیدا می کنه مد نظر نیست و لازمه که با پیمایش همه فیلدها این مقدار پیدا بشه
سلام،
هدف شما مگر جز اینه که ماکزیمم مقدار را به ازای هر سطر بدست بیارین؟ خب چه فرقی میکند که این مقدار توسط یک تابع صورت بدست بیاید یا روش دیگه؟ چنین تابعی در SQL Server وجود ندارد. ولی اگر بود که کار را بسیار ساده تر میشد!
شاید مساله شما چیز دیگری است و آن را مشابه سازی کردین تا راه حل ارائه داده شده را تعمیم بدهید به مساله اصلی...
saeed6162
دوشنبه 07 مرداد 1392, 09:10 صبح
شاید مساله شما چیز دیگری است و آن را مشابه سازی کردین تا راه حل ارائه داده شده را تعمیم بدهید به مساله اصلی...
بله در اصل مساله چیز دیگریست و قصد داشتم از راه حل این مساله جهت حل مساله اصلی استفاده کنم.
محمد سلیم آبادی
دوشنبه 07 مرداد 1392, 14:37 عصر
این هم یک روش جایگزین مناسب:
SELECT row_id, MAX(value) as maximum
FROM table_name T
CROSS APPLY (VALUES (n1), (n2), (n3),... (n200)) AS D(value)
GROUP BY row_id;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.