PDA

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



sanaz.dadkhah
شنبه 15 بهمن 1390, 21:09 عصر
سلام من یک کوئری دارم به این شکل حالا نیاز دارم فیلدی اضافه کنم که جمع مجموع ستون "جمع " را برایم نگهداری کند
http://img4up.com/up2/37572063911505908660.bmp
به چه طریقی متوانم این کار را انجام دهم؟؟

Galawij
شنبه 15 بهمن 1390, 22:38 عصر
سلام،
اگر از ورژن 2008 استفاده می کنید، امکانات جالبی برای این کار از طریق Group By گذاشته که نیاز شما را به صورت سطری می ده(این لینک (http://blogs.msdn.com/b/craigfr/archive/2007/10/11/grouping-sets-in-sql-server-2008.aspx) را ببینید متوجه می شید).
نیازی به نگهداری نتایج فیلدهای محاسباتی نمی بینم، مگر اینکه واقعاً لازم باشه!

sanaz.dadkhah
شنبه 15 بهمن 1390, 22:52 عصر
من از ورژن 2005 استفاده میکنم ولی مشکل اینجاست که من میخواهم وقتی جمع حساب لحظه ای را داشته باشم نمیخواهم چیزی را ثبت کنم یعنی میخواهم که اگه شخص بدهکار شد از فیلد مجمع کم بشه و اگه بستانکار شد اضافه بشه
http://img4up.com/up2/28606069103018438266.bmp
ببینید من اصلا فیلد جمع را ندارم و میخام تو select بدستش بیارم
ساختار من به شکل اول است که گذاشتم ولی من میخام یه فیلد جمع مثل شکل بالا اضافه کنم
لطفا راهنمایی کنید

یوسف زالی
یک شنبه 16 بهمن 1390, 08:10 صبح
سلام.
این مثال می تونه شما رو راهنمایی کنه:

declare @Tbl table(ID int, Stat int, Value decimal)
insert into @Tbl
values(1,-1, 12500),(2,-1, 12500),(3, 1, 25000),(4, 1, 14000)
select *,
(select sum(B.Value * B.Stat) from @Tbl B where B.ID <= A.ID)
from @Tbl A

baktash.n81@gmail.com
یک شنبه 16 بهمن 1390, 08:25 صبح
سلام




WITH OrderdRecord AS
(
SELECT ID,[Status],Amount,case [Status] when 'true' then Amount else -1*Amount end as Amount2,
ROW_NUMBER() OVER (ORDER BY ID) AS 'RowNumber'
FROM TableName
)
SELECT OrderdRecord2.ID,OrderdRecord2.[Status],OrderdRecord2.Amount2,(SELECT SUM(Amount) FROM OrderdRecord WHERE RowNumber<=OrderdRecord2.RowNumber) AS AmountSum FROM OrderdRecord AS OrderdRecord2



این کد جواب میده اما من مطمئن نیستم بهترین روش باشه ...

من فرض کردم که ترتیب رکوردها ممکنه بر اساس فیلد خاصی باشه ...

اول امدم با دستور Case مبلغهایی رو که بدهکار هستند منفی کردم ... Statuse نشان دهنده بدهکار بودن که یه بیت هست که اگه true باشه طلب کار و در غیر اینصورت بدهکار خواهد بود ... Amount هم که مبلغ هست

بعد هم مقدار Amount2 که همون عدد منفی یا مثبت هست رو با تمام رکوردهای بالا سرش جمع کردم گذاشتم تو AmountSum

hamid.karimy
یک شنبه 16 بهمن 1390, 11:29 صبح
select [amount]+[sum], [amount],[sum] from yourtable