PDA

View Full Version : با یک Query



zman123456
یک شنبه 04 آذر 1386, 08:34 صبح
با سلام
می خوام یک Query بزنم و یک جمع کلی در بیارم ولی نمی دونم این کاری که میخوام انجام بدم رو میشه واقعا با یک Query انجام داد یا مغز من دیگه نمیکشه.
Table1:
Code:int
Flag:int
مقادیر : 1 یا 0
با بقیه فیلدها کاری ندارم
Table2
IDNo:int
‍Code:int
همان کد بالاست.relation‌ بین جداول
Price:int
DatePrice:int
مقادیر:13860101
با بقیه فیلدها کاری ندارم.
حالا من می خوام جمع Price‌ رو بگیرم که flag اون برابر 1 باشه و DatePrice هم بزرگترین تاریخ برای اون code های خاص باشه.:عصبانی++:

aidin300
دوشنبه 05 آذر 1386, 13:58 عصر
از کد زیر استفاده کن اگه مشکلی بود بگو

SELECT SUM(Price) FROM Table2
WHERE DatePrice =(SELECT MAX(DatePrice) FROM Table2)
AND CODE IN(SELECT CODE FROM Table1 WHERE Flag=1)

zman123456
دوشنبه 05 آذر 1386, 16:42 عصر
SELECT SUM(Price) FROM Table2
WHERE DatePrice =(SELECT MAX(DatePrice) FROM Table2)
AND CODE IN(SELECT CODE FROM Table1 WHERE Flag=1)


مرسی
گرفتن کدها از Table1 درسته ولی شرط اول اشتباهه.این بزرگترین تاریخ موجود در Table2 رو بر میگردونه و بر اساس اون شرط میزنه ولی شاید تقصیر من باشه که نگفتم :
هر کدی امکان داره چندین رکورد براش ثبت شده باشه و هر کدوم تاریخ خودشونو دارن و حالا همه کدها اینجا هست پس این می یاد بزرگترین تاریخ توی جدول رو در میاره نه بزرگترین تاریخ این کد خاص رو.
باز هم از اینکه این زحمت رو به خودتون دادید ممنون.
مثال از Table2:
code,idno,price,dateprice:
1,12,1560,13860101
1,15,1580,13860205

2,25,2540,13850202
2,66,2900,13860301

حالا فکر کنم مشخص شد.

aidin300
سه شنبه 06 آذر 1386, 00:23 صبح
خوب اگه برای یک Code خاص می خواهی دیگه نیازی به فیلد flag نداری می تونی از این کد استفاده کنی
SELECT SUM(Price) FROM Table2
WHERE DatePrice =(SELECT MAX(DatePrice) FROM Table2 AND CODE=MyCode)
AND CODE=MyCode اگه اشتباه متوجه شدم تو همون مثال قبل بگو نتیجه چه مقداری باید باشه، ورودی ها رو هم بگو(فقط Flag کد اول یا فقط Code کد دوم)

zman123456
چهارشنبه 14 آذر 1386, 07:40 صبح
خوب اگه برای یک Code خاص می خواهی دیگه نیازی به فیلد flag نداری
:قهقهه::اشتباه: منظورم از یک کد خاص یعنی یک دسته کد خاص.:قهقهه: شرمنده.
اون یکدسته کد خاص هم همونایی هستن که Flag = 1 دارن.

amirfarshad
چهارشنبه 28 آذر 1386, 22:33 عصر
سلام
من کاملا متوجه نشدم مسئله چیه
با توجه به اونچیزی که فهمیدم این کد رو نوشتم، اگر درست بود که هیچ ، ولی اگر درست نبود، لطفا صورت مسئله رو کامل از اول توضیح بدید.
ممنون


SELECT CODE,SUM(PRICE),MAX(DATEPRICE) FROM TBL2
WHERE CODE IN (SELECT CODE FROM TBL1 WHERE FLAG=1)
GROUP BY CODE;

zman123456
شنبه 01 دی 1386, 10:33 صبح
من فیلد های جدول رو در اول قید کردم.

amirfarshad
شنبه 01 دی 1386, 16:59 عصر
من فیلد های جدول رو در اول قید کردم.

منظورم فیلدهای جدولها نبود

آیا شما منظورتون این بود؟ : مجموع قیمتهای کدهایی که flag اونها برابر یک هست و همینطور ماکسیمم تاریخ وارد شده در جدول برای اون کدها


برای مثال از نمونه دیتاهای خودتون استفاده میکنم:


مثال از Table2:
code,idno,price,dateprice:
1,12,1560,13860101
1,15,1580,13860205

2,25,2540,13850202
2,66,2900,13860301

فرض کنیم در دیتا های بالا کد 1 دارای flag=1 باشد
آیا خروجی شما باید برابر مقادیر زیر باشد؟ :
sum(price)=3140
max(dateprice)=13860205

و اگر کد 2 دارای flag=1 باشد این مقادیر را در خروجی میبینیم:
sum(price)=5440
max(dateprice)=13860301

zman123456
دوشنبه 03 دی 1386, 07:49 صبح
نه عزیز
اگه اینو در نظر بگیریم:
1,12,1560,13860101
1,15,1580,13860205

2,25,2540,13850202
2,66,2900,13860301
و هر دوی این دو کد 1 و 2 Flag=1 داشته باشند ردیفهایی که باید جواب نهایی ازشون گرفته بشه بصورت زیر باید در بیاد:
1 1580 13860205
2 2900 13860301
که جواب اصلی یی که من می خوام اینه
4480
از لطف شما متشکرم

amirfarshad
دوشنبه 03 دی 1386, 20:49 عصر
سلام



SELECT SUM(PRICE) FROM TBL2
WHERE DATEPRICE IN (SELECT MAX(DATEPRICE) FROM TBL2
WHERE CODE IN (SELECT CODE FROM TBL1
WHERE FLAG=1)
GROUP BY CODE);

zman123456
سه شنبه 04 دی 1386, 13:32 عصر
این می یاد هرچی از بزگترین تاریخ رو جمع میزنه.
من می خوام از هر کدی که flag=1 داره بره بزرگترین تاریخ شو نگاه کنه و تمام این ها رو با هم جمع بزنه.
فکر میکنم شرطها نباید تو در تو باشد ولی یک جاش هم باید تو در تو باشه اینه که گیجم می کنه.

amirfarshad
چهارشنبه 05 دی 1386, 09:43 صبح
SELECT SUM(PRICE) FROM TBL2
WHERE DATEPRICE IN (SELECT MAX(DATEPRICE) FROM TBL2
WHERE CODE IN (SELECT CODE FROM TBL1
WHERE FLAG=1)
GROUP BY CODE);در اینجا شرطی که برای DATEPRICE گذاشتم، بزرگترین تاریخهایی رو بر میگردونه که CODE آنها FLAG=1 رو داره.
شما اینرو با دیتاهات آزمایش کن، چون من اینکار رو با دیتاهای آزمایشی امتحان کردم، مجموع قیمتهایی رو برمیگردوند که اولا FLAG اونها برابر یک بود، ثانیا تاریخ اونها بزرگترین از نوع خودش بود(یعنی بزرگترین تاریخ از بین کدهای مشابه)
البته این کوئری یک مشکلی داره، اونهم اینه که اگر توی جدول دوم در یک تاریخ، 2 تا کد از یک نوع باشن(مثلا هر دو دارای CODE=1 باشن) اون وقت احتمالا ، خطایی ایجاد میشه.
برای اینکه بقول خودت گیج نشی، بهتره کدهایی رو که مینویسی با دیتاهای آزمایشی تست کنی.