ورود

View Full Version : کمک برای نوشتن یک کوئری با شرایط خاص



morteza271
سه شنبه 04 تیر 1392, 22:14 عصر
سلام دوستان.
من یه کوئری نیاز دارم که راستش نتونستم خودم به نتیجه ای برسم و به همین خاطر اومدم تا از شما دوستان کمک بگیرم.

من یه جدول دارم که یه ستون تاریخ و یه ستون مبلغ داره.
که این ستون مبلغ میتونه مقادیرش منفی و یا مثبت باشه.

حالا میخوام وقتی از این جدول گزارش میگیرم یه کوئری بنویسم که یه ستون محاسباتی بهش اضافه بشه(یعنی فقط توی کوئری بیاد) با عنوان مانده!
به عکس زیر دقت کنین :
106171
فرض کنید من الان کوئری زیر رو دارم :
Select Date, Amount
From tblTransactions
حالا اینو چطوری تغییر بدم که یه ستون مانده هم در هر سطر بهم بده؟
منتظر راهنمایی های دوستان هستم...

Mahmoud.Afrad
چهارشنبه 05 تیر 1392, 00:56 صبح
مانده از چی؟ مانده بر چه اساسی حساب میشه؟
یه معیار لازمه
مثلا برای هر شخص(یا هر چیزه دیگه) با توجه به مقداری که باید پرداخت بشه و مقداری که تا الان پرداخت شده.

شایدم منظورت مجموع مبلغ برای هر سطر با سطرهای قبلش هست؟

باید مشخص کنید.

morteza271
چهارشنبه 05 تیر 1392, 22:49 عصر
از این که پاسخ دادین ممنونم.

مثل اینکه منظورمو درست نرسوندم!

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

شایدم منظورت مجموع مبلغ برای هر سطر با سطرهای قبلش هست؟
آره منظورم اینه.

ممنون میشم اگه لطف کنید و راهنمایی ام کنید که چطوری میتونم یه کوئری خوب و بهینه بنویسم واسه اینکار....

Mahmoud.Afrad
پنج شنبه 06 تیر 1392, 00:56 صبح
مسئله running total هست.

SELECT a.id,
a.Mablagh,
a.Tarikh,
(
SELECT SUM(b.Mablagh)
FROM Tbl b
WHERE b.id <= a.id
) as Mande
FROM Tbl a
ORDER BY a.id;



SELECT a.id,
a.Mablagh,
a.Tarikh,
SUM(b.Mablagh) as Mande
FROM Tbl a,
Tbl b
WHERE b.id <= a.id
GROUP BY a.id, a.Tarikh, a.Mablagh
ORDER BY a.Tarikh;



;WITH cte AS
(
SELECT Id,
Tarikh,
mablagh,
ROW_NUMBER() OVER(ORDER BY Tarikh) AS row
FROM Tbl
)
SELECT a.id,
a.Tarikh,
a.Mablagh,
SUM(cte.Mablagh) as Mande
FROM cte a
INNER JOIN cte ON a.row >= cte.row
GROUP BY a.id , a.Tarikh , a.Mablagh
order by a.Tarikh