PDA

View Full Version : انتخاب قسمتی از رکوردها بر اساس مجموع یک فیلد



Marjan_pr
شنبه 21 دی 1387, 13:07 عصر
بطور مثال 10 تا رکورد داریم ، دستوری که نیاز دارم اینه که رکوردها رو براساس یه فیلد مرتب کنه و رکورد هایی رو بهم نمایش بده که مجموع یه فیلد تا آخرین رکورد انتخاب شده برابر مقدار که بهش میدم باشه



1 4
2 7
3 12
4 6
5 3
6 8


هدف اینه که تا رکوردی رو نشون بده که مجموع فیلد مثلا 23 بشه ، (نتیجه میشه 3 رکورد اول)

دوستان از طریق کد نویسی این موضوع قابل اجراست منتهی سرعت کار پایینه ، دوستان دستور SQl خاصی (SQLServer2000) برای حل این سراغ دارند یا نه ؟!

از توجه شما ممنونم .

mannai29
شنبه 21 دی 1387, 17:27 عصر
که رکوردها رو براساس یه فیلد مرتب کنه
تا اینجا باید از Order By بر اساس فیلد مورد نظر استفاده کنید.

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

AminSobati
شنبه 21 دی 1387, 23:29 عصر
دوست عزیزم بهتره از Cursor استفاده کنید.

Marjan_pr
یک شنبه 22 دی 1387, 00:55 صبح
ممنونم از لطف تون آقای ثباتی و mannai29 :

mannai29 عزیز اگه منظور شما از ستون ، Column جدول است که جوابتون برای من نامفهومه ، ولی اگه رکورد رو در نظر داشتید باید بگم که تمام هدف من اینه که با دستور خاص تعداد رکورد معینی رو که مجموع یه فیلدشون برابر یه عدد بشه بهم برگردونه ، خود تعداد رکوردها ( و یا خود رکوردها ) مجهوله ؟!

آقای ثباتی:
هم اونطور که گفتم ،هدف من پیدا کردن راه آسان ( مثلا یه Select خاص ) و سریعتر کردن این قضیه است ، فعلا با کد نویسی این مشکل رو رفع کردم ، اگه اشتباه نکنم برای Cursor ها هم باید کد نوشت، فقط اینکه در زمان طراحی کمپایل میشند ، ولی اصل قضیه پابرجاست.
آیا این موضوع در نسخه های 2005 , 2008 هم راهی نداره ؟!!

AminSobati
یک شنبه 22 دی 1387, 01:30 صبح
SQL Server اصطلاحا Set Based کار میکنه ولی نیاز شما Row Based Calculation هست که تا نسخه 2008 هنوز ازش پشتیبانی نشده. البته نمیدنم با کدنویسی به چه شکل این مشکل رو حل کردین ولی احتمال میدم Cursor سرعت بیشتری به کار شما بده

mannai29
یک شنبه 22 دی 1387, 11:42 صبح
ولی اگه رکورد رو در نظر داشتید ...
بله منظورم جمع تا قبل از سطر مورد نظر بود که من اشتباه کردم!

ar.shirazi
یک شنبه 22 دی 1387, 14:09 عصر
بطور مثال 10 تا رکورد داریم ، دستوری که نیاز دارم اینه که رکوردها رو براساس یه فیلد مرتب کنه و رکورد هایی رو بهم نمایش بده که مجموع یه فیلد تا آخرین رکورد انتخاب شده برابر مقدار که بهش میدم باشه



1 4
2 7
3 12
4 6
5 3
6 8
هدف اینه که تا رکوردی رو نشون بده که مجموع فیلد مثلا 23 بشه ، (نتیجه میشه 3 رکورد اول)

دوستان از طریق کد نویسی این موضوع قابل اجراست منتهی سرعت کار پایینه ، دوستان دستور SQl خاصی (SQLServer2000) برای حل این سراغ دارند یا نه ؟!

از توجه شما ممنونم .
آیا دارای یک ستون idenditiy هستید؟ با فرض این که ستون col1 از نوع identitiy باشد:


declare @testValue int
set @testValue=10

select col1 , col2 , SUM(select col2 from table1 where col2<@testValue)
from table1
where col1=@testValue