PDA

View Full Version : max هر سطر



meitti
یک شنبه 25 مرداد 1388, 11:36 صبح
با سلام
من چنین کوئری نوشتم که اطلاعات رو به صورت زیر نشون میده:

21 65 98 32 1
48 22 55 22 2
99 66 21 59 3
.
.
.

من می خوام برای هر سطر بزرگترین عدد رو به من برگردونه(مثلا سطر 1 عدد 98 و ....)

Omid_Manam
یک شنبه 25 مرداد 1388, 11:46 صبح
دوست عزیز اطلاعاتت کافی نیست میشه بگی اصلا اینا چی هستن و از کجا میگیری و به چه شکل؟
تا حداقل اگه منم نتونستم دیگران کمکت کنن

برای مشکلات بنبستی نیست ، یا راهی خواهیم یافت ، یا راهی خواهیم ساخت

behzad_dr
یک شنبه 25 مرداد 1388, 11:53 صبح
دوست عزیز ، یه سرچی در رابطه با Group By بزنی متوجه میشی ..

meitti
یک شنبه 25 مرداد 1388, 11:59 صبح
با تشکر از دوست گرامی
من یه ماشینی دارم
توی چند تا جدول شماره کیلومتر اون رو ثبت می کنم (توسط چند فرم متفاوت)
من حالا بزرگترین کیلومتر رو از هر جدول واسه اون ماشین اوردم که جلوی کد ماشین من حالا 5 تا ستون هست
حالا من می خوام بین اون 5 تا ستون بزرگترین رو پیدا کنم

meysam_pro
یک شنبه 25 مرداد 1388, 12:20 عصر
فکر کنم تو طراحی جدول کمی اشتباه کردین(با این نکاتی که گفتین). لطفا خواسته تون رو از اول بگین.

meitti
یک شنبه 25 مرداد 1388, 12:43 عصر
با تشکر از همه
من یه سری اطلاعات توی چند تا جدول ثبت کردم
حالا اومد و با استفاده از یه کوئری اونها رو تجمیع کردم
شد به صورت عکسی که در پست قبلی نشون دادم
حالامن می خوام توی هر سطر بزرگترین اون رو انتخاب کنم

محمد سلیم آبادی
یک شنبه 25 مرداد 1388, 12:54 عصر
شما بزرگترین مقادیر را از جداول دیگر آورده اید جلوی کد ماشین درست است؟ حالا فرض کنید یک ماشین اصلا هیچ مقداری ندارد و یک ماشین 25 مقدار دارد باید 25 ستون به جدول اضافه شود در صورتی که خیلی از ماشین ها مثلا کمتر از 10 مقدار دارند این عقلانی است؟

سوال اینجاست چطوری مقادری را به صورت ستون در می آورید با استفاده از subquery ؟

راحت تر نیستید که این کار را انجام دهید.
کد ماشین و بزرگترین مقادیر از جداول دیگر
1 12
1 25
1 85
1 98
2 2
2 25
3 30
4 25

meitti
یک شنبه 25 مرداد 1388, 13:30 عصر
با سلام خدمت دوست عزیز
من همین کارو کردم
من یه سری اطلاعات رو توی 5 تا جدول طراحی کردم
حالا max اون اطلاعات(از هر جدول) رو توی یه کوئری تجمیع کردم
شد همون عکسی که فرستادم
حالا پنج تا ستون دارم می خوام برای هر ماشین بزرگترین ستون رو انتخاب کنم

محمد سلیم آبادی
یک شنبه 25 مرداد 1388, 13:42 عصر
مطالب پست 8 با مطالب پست 6 چه تفاوتی دارد؟

به هر حال من می توانم query بنویسم که مساله نمونه ی شما را حل کند (با استفاده از case) ولی باز هم تکرار می کنم روشی که پیش گرفته اید کلا مشکل دارد.

meitti
یک شنبه 25 مرداد 1388, 13:45 عصر
شما گفتین که max اطلاعات رو بگیر منم هین کار رو کرده بودم
الان برای هر ماشین من یه مقدار میاد
یعنی بزرگترین کیلومتر از هر جدول مربوط به اون ماشین

محمد سلیم آبادی
یک شنبه 25 مرداد 1388, 14:13 عصر
اگر از SQL Server 2005 به بالا استفاده می کنید می تو انید از عملگر UNPIVOT برای نوشتن query مورد نظر استفاده کنید.

من ابتدا یک جدول ایجاد می کنم سپس با چند سطر نمونه پر اش می کنم سپس جدول را UNPIVOT کرده سپس MAX را بدست می آورم.

مقادیر نمونه جدول


ID v1 v2 v3 v4
----------- ----------- ----------- ----------- -----------
1 34 3 5 4
2 4 1 15 5
3 4 3 65 4
4 84 2 5 5
5 5 1 5 5

(5 row(s) affected)


خروجی پس از اجرای query




id Max_Value
----------- -----------
1 34
2 15
3 65
4 84
5 5








CREATE TABLE pvt (ID int, v1 int, v2 int,
v3 int, v4 int)
GO
INSERT INTO pvt VALUES (1,34,3,5,4)
INSERT INTO pvt VALUES (2,4,1,15,5)
INSERT INTO pvt VALUES (3,4,3,65,4)
INSERT INTO pvt VALUES (4,84,2,5,5)
INSERT INTO pvt VALUES (5,5,1,5,5)
GO

SELECT * FROM pvt

SELECT id, Max_Value=MAX([Value])
FROM
(
SELECT ID, [Number]=CAST(Number AS NVARCHAR(15)), [Value]
FROM
(SELECT ID, v1, v2, v3, v4
FROM pvt) p
UNPIVOT
([Value] FOR [Number] IN
(v1, v2, v3, v4)
)AS unpvt
) D
GROUP BY id

GO
Drop table pvt

محمد سلیم آبادی
یک شنبه 25 مرداد 1388, 14:30 عصر
و اگر هم از SQL 2000 استفاده می کنید می توانید از راه حل زیر استفاده کنید . این راه حل دقیقا نتیجه ی مشابه به روش قبلی را می دهد.



SELECT id,
(CASE WHEN v1>v2 AND v1>v3 AND v1>v4 AND v1>v5 THEN v1
WHEN v2>v1 AND v2>v3 AND v2>v4 AND v2>v5 THEN v2
WHEN v3>v1 AND v3>v2 AND v3>v4 AND v3>v5 THEN v3
WHEN v4>v1 AND v4>v2 AND v4>v3 AND v4>v5 THEN v4
ELSE v5
END) AS Max_Value
FROM pvt


خروجی



id Max_Value
----------- -----------
1 34
2 15
3 65
4 84
5 8