PDA

View Full Version : مشکل در جواب query



حمیدرضاصادقیان
دوشنبه 21 خرداد 1386, 13:12 عصر
سلام خدمت اساتید گرام. در مورد گزارش کل من query زیر رو نوشتم ولی با یک مشکل کوچک مواجه شدم.


select sanad,rdf,kol_n,moen_n,tafzil_n,disk1,date1,price, bd_bs,remainder= (select sum
(case when x.bd_bs = 1 then price else -price end)
from f_sanad x where x.sanad = t.sanad and x.rdf <= t.rdf)from f_sanad t
where kol_N=10
order by sanad, rdf

داده ها
----------------------------------------------
Sanad rdf date price bd_bs remainder
-------------------------------------------------------
754 1 81/03/01 1000000 1 1000000
931 2 81/03/06 1000000 0 0
1560 1 81/03/18 2000000 1 2000000
1561 2 81/03/18 2000000 0 0
1753 1 81/03/25 2000000 1 2000000
1754 2 81/03/25 1000000 1 1000000
1755 2 81/03/25 2000000 0 0
1755 4 81/03/25 1000000 0 0
1799 1 81/03/25 1000000 1 1000000
1800 1 81/03/25 2000000 1 2000000
1801 1 81/03/25 2000000 1 2000000
1802 1 81/03/25 1000000 1 1000000
1803 1 81/03/25 2000000 1 2000000
1804 6 81/03/25 8000000 0 0
1827 1 81/03/27 1000000 1 1000000
1828 2 81/03/27 1000000 0 0
2191 1 81/04/08 1000000 1 1000000
2192 2 81/04/08 1000000 0 0
2524 1 81/04/17 2000000 1 2000000
2525 2 81/04/17 2000000 0 0

---------------------------------------------------
و جواب query در زیر امده
Sanad rdf date price bd_bs remainder(incorrect) remainder(Correct)
-----------------------------------------------------------------------------------------
1799 1 81/03/25 1000000 1 1000000 1000000
1800 1 81/03/25 2000000 1 2000000 3000000
1801 1 81/03/25 2000000 1 2000000 5000000
1802 1 81/03/25 1000000 1 1000000 6000000
1803 1 81/03/25 2000000 1 2000000 8000000

AminSobati
دوشنبه 21 خرداد 1386, 13:24 عصر
حالا سوال یا اشکال کجاست؟!

حمیدرضاصادقیان
دوشنبه 21 خرداد 1386, 16:13 عصر
ببینید استاد من جوابی رو که با توجه به داده های بالای اون براتون نوشتم دارای دو ستون Remainder(Incorrect) هست که جواب غلطه و ستون Remainder(Correct) که جواب درسته می باشد. این query فقط ستون remainder(incorrect) رو به من میده در صورتی که من نیاز دارم جوابهاش مثل ستون Remainder(Correct) باشه.

AminSobati
دوشنبه 21 خرداد 1386, 23:12 عصر
یادمه در یکی از تاپیکها مفصلا روی این موضوع با هم تبادل نظر کردیم. دستاوردی نداشت برای شما؟

AminSobati
دوشنبه 21 خرداد 1386, 23:14 عصر
http://www.barnamenevis.org/forum/showthread.php?t=21194

supporter
سه شنبه 22 خرداد 1386, 20:45 عصر
این رو هم نگاه کن شاید به دردت خورد (البته شاید بشه تمیزترش کرد)




SELECT t.sanad,t.rdf, SUM(CASE
WHEN x.bd_bs = 1 then x.price
ELSE - x.price
END) AS Remainder
FROM f_sanad x
JOIN f_sanad t ON ( (x.sanad <= t.sanad)
OR ((x.sanad = t.sanad) AND (x.rdf < t.rdf))
)
WHERE x.kol_N = 10
AND t.kol_N = 10
GROUP BY t.sanad, t.rdf
ORDER BY t.sanad

حمیدرضاصادقیان
چهارشنبه 23 خرداد 1386, 13:19 عصر
استاد ثباتی مممنون.ولی مشکل اینجاست که وقتی شماره سند عوض میشه به جای اینکه جمع ستون باقیمانده رو ادامه بده دوباره مقدار ستونی که شماره سندش عوض شده رو نمایش میده.

supporter
پنج شنبه 24 خرداد 1386, 19:12 عصر
من Query بالا رو با داده های شما تست کردم ولی به جای kol_N = 10 (چون نمی‌دونستم برای کدوم رکوردها این شرط برقراره) از sanad between 1799 and 1803 استفاده کردم و به نظرم خروجی مشکلی نداشت.