ورود

View Full Version : بهترین شکل نوشتن یک Query



aliasghar
چهارشنبه 23 آذر 1384, 08:33 صبح
سلام
ببخشید باز هم یک سئوال برام پیش اومد که هر چی فکر کردم به نتیجه ای نرسیدم
نمی دونم بهترین راه حل مشکل من چیه؟

http://www.barnamenevis.org/forum/attachment.php?attachmentid=1657&stc=1
فرض کنید که داده های بالا را داشته باشم
حالا میخواخم یک Query دینامیک (پروسجر یا فانکشن) داشته باشم که با پاس کردن یک عدد به اون
آخرین رکوردهایی را که جمع فیلد تعداد اونها برابر یا بزرگتر با تعداد پاس شده باشه به من برگردونه
مثلا اگر عدد 10 را به پروسجر پاس کنم سه رکورد اخر را که جمع فیلد تعداد مساوی 10 است را بر گردونه
و اگر 11 را پاس کنم چهار رکورد آخر که جمعشون بزرگتر از 11 است را بر گردونه (چونکه جمع فیلد تعداد هر چند تا رکورد
از آخر دقیقا 11 تا نمیشه)

البته این کار را نمی خواهم از طریق Cursor انجام دهم چونکه باید به دفعات زیاد تکرار شود

ممنون

Kamyar.Kimiyabeigi
چهارشنبه 23 آذر 1384, 09:42 صبح
البته این کار را نمی خواهم از طریق Cursor انجام دهم چونکه باید به دفعات زیاد تکرار شود

من فکر میکنم چون می خواین از stored procedure و یا function استفاده کنین مجبورین از اشاره گر (cursor) استفاده کنین

AminSobati
دوشنبه 28 آذر 1384, 10:01 صبح
البته با روشهای ساده تر هم میشه نوشت. من یک مثال برای دیتابیس Northwind نوشتم که سایر دوستان هم بتونین اجرا کنن و منحصر به جدول شما نباشه. طبعا میتونین تغییرش بدین و برای جداول خودتون استفاده کنین. در این SP فرض بر اینکه از جدول Products، روی فیلد UnitPrice قصد داریم مجموع رو حساب کنیم (ولی همونطور که خواسته بودید، از آخر Table)


CREATE PROC usp_1
@Param1 INT
AS
SELECT * FROM
(SELECT TOP 100 PERCENT (SELECT SUM(UnitPrice) FROM Products
WHERE ProductID>=P2.ProductID) AS ColSum,*
FROM Products P2
ORDER BY ProductID DESC) SubQuery
WHERE ColSum<=@Param1
GO

EXEC usp_1 13
GO
EXEC usp_1 32

aliasghar
دوشنبه 28 آذر 1384, 17:42 عصر
یک دنیا ممنون