PDA

View Full Version : برگرداندن بزرگترین مقدار در join



mahlake
پنج شنبه 03 مهر 1393, 16:37 عصر
با عرض سلام خدمت مهندسین گرامی
در کد زیر باید بزرگترین مقدار از جمع ۲ فیلد code و id را به دست بیاورد آن را با نام آن کاربر نمایش دهد.
حال من بیشترین رکورد رو \یدا کرده ام اما وقتی join میزنم بقیه یوزر ها رو هم که در آن بخش نظر داده اند نشان میدهد در صورتی که فقط باید کسی را نشان دهد که مجموع مقادیر id و code آن در جدول اول بیشترین هست را نشان دهد.
لطفا کمک نمایید:

SELECT MAX([Table_1].code+[Table_1].id), [tbl2].uname
from [table_1]
left join [tbl2] on [table_1].cuser=[tbl2].cuser
where [table_1].bakhsh=1
group by [tbl2].uname



جدول اول(table_1):

id --- code --- bakhsh --- cuser
1 ----------- 1 -------- 32 ----- 8
2 ----------- 2 -------- 35 ---- 12
3 ---------- 1 -------- 50 ---- 12
4 ---------- 1 -------- 45 ----- 8
5 ----------- 2 -------- 12 ----- 3

جدول دوم (tbl2):

uname --- cuser
ali ----------- 1
azad --------- 2
3 --------- amir
4 ------- saman
5 --------- reza

خروجی که باید نشان داده بشود:

(uname --- max(id+code
62 ------------------ amir

اما خروجی که با کد من نشان داده میشود:

(uname --- max(id+code
62 ------------------ amir
53 ---------------- saman
40 ------------------ ali



مشکل کجاست؟ لطفا اگه میتوانید کمک کنید تا کدم را اصلاح کنم...

asemoon barooni
پنج شنبه 03 مهر 1393, 16:51 عصر
سلام

دوست عزیز مشکل کد شما همزمانی در گرفتن بیشترین مقدار و عمل left join هستش شما ابتدا با یک subquery بزرگترین مقدار رو پیدا کنید بعد با جدول دومیjoin رو انجام بدید.

mahlake
جمعه 04 مهر 1393, 11:15 صبح
سلام

دوست عزیز مشکل کد شما همزمانی در گرفتن بیشترین مقدار و عمل left join هستش شما ابتدا با یک subquery بزرگترین مقدار رو پیدا کنید بعد با جدول دومیjoin رو انجام بدید.

مرسی بابت راهنماییتان اما من تازه کار هستم...
اگر امکانش هست لطفا یک نمونه کد برای راهنمایی بنده بگزارید یا اگر وقت دارید ایراد کد بنده را رفع کنید و کد اصلاح شده را در اختیار من بگزارید...
با تشکر از توجه و پیگیری شما

mahlake
جمعه 04 مهر 1393, 20:59 عصر
یکی از دوستان گفتن که با سلکت تو در تو هم میشه اما من هر چی کد زدم باز کار نکرد.

لطفا دوستان کمکم کنید کارم خیلی گیره

cherchil_hra
شنبه 05 مهر 1393, 07:35 صبح
شما باید از Top و Order by استفاده کنی
SELECT TOP(1) MAX(t1.code + t1.id) AS MaxIDCode,t2.uname
FROM [Table_1] AS t1
INNER JOIN [tbl2] AS t2
ON t1.cuser = t2.cuser
WHERE t1.bakhsh = 1
GROUP BY
t2.uname
ORDER BY MaxIDCode DESC

حالا چرا از left join استفاده کردی؟ چون همه cuser های جدول table_1 باید در جدول tbl2 باشه. یعنی اگه از inner join هم استفاده کنی همین خروجی رو داری

البته تابع max و group by شما هم بی تاثیره!!!
SELECT TOP(1) t1.code + t1.id AS MaxIDCode,t2.uname
FROM [Table_1] AS t1
INNER JOIN [tbl2] AS t2
ON t1.cuser = t2.cuser
WHERE t1.bakhsh = 1
ORDER BY MaxIDCode DESC

که مسلما هزینه کوئری دومی نسبت به اولی کمتر خواهد بود.

موفق باشید!

mahlake
شنبه 05 مهر 1393, 10:07 صبح
شما باید از Top و Order by استفاده کنی
SELECT TOP(1) MAX(t1.code + t1.id) AS MaxIDCode,t2.uname
FROM [Table_1] AS t1
INNER JOIN [tbl2] AS t2
ON t1.cuser = t2.cuser
WHERE t1.bakhsh = 1
GROUP BY
t2.uname
ORDER BY MaxIDCode DESC

حالا چرا از left join استفاده کردی؟ چون همه cuser های جدول table_1 باید در جدول tbl2 باشه. یعنی اگه از inner join هم استفاده کنی همین خروجی رو داری

البته تابع max و group by شما هم بی تاثیره!!!
SELECT TOP(1) t1.code + t1.id AS MaxIDCode,t2.uname
FROM [Table_1] AS t1
INNER JOIN [tbl2] AS t2
ON t1.cuser = t2.cuser
WHERE t1.bakhsh = 1
ORDER BY MaxIDCode DESC

که مسلما هزینه کوئری دومی نسبت به اولی کمتر خواهد بود.

موفق باشید!

آقا دستت درد نکنه خیلی ممنون...
واقعا کارم راه افتاد ...
خیلی مرسی..