PDA

View Full Version : استفاده دوبار از تابع sum



milad.biroonvand
یک شنبه 30 آذر 1393, 11:53 صبح
چگونه دوبار از دستور sum استفاده کنم برای مثال شکل صحیح دستور sum به چه صورت است:
SELECT Sum ( Abs(Sum([p])-Sum([d])) ) AS jam FROM tbl1 GROUP BY cm having (Sum(p)-Sum(d) < 0 )

یوسف زالی
یک شنبه 30 آذر 1393, 16:13 عصر
در نهایت چی باید به خروجی بره؟
جمع ریز یا جمع کل یا هردو؟
اگر هردو، یکی از راههاش union هست.

pezhvakco
یک شنبه 30 آذر 1393, 17:17 عصر
شاید

Select SUM(SubTb.Expr1)
From (
SELECT ABS(SUM(Col01) - sum(Col01)) AS Expr1
FROM [dbo].[Table01]
Group By Col03
Having (SUM(Col01) - SUM(Col012)) < 0
) AS SubTb

milad.biroonvand
یک شنبه 30 آذر 1393, 19:03 عصر
در نهایت چی باید به خروجی بره؟
جمع ریز یا جمع کل یا هردو؟
اگر هردو، یکی از راههاش union هست.

-------

در اصل اینه
sum( Sum(p) - sum (d) )

اول حاصل تفریق sum(p و sum(d و سپس حاصل جمع کل sum d و sum p ها.

milad.biroonvand
دوشنبه 01 دی 1393, 09:21 صبح
شاید

Select SUM(SubTb.Expr1)
From (
SELECT ABS(SUM(Col01) - sum(Col01)) AS Expr1
FROM [dbo].[Table01]
Group By Col03
Having (SUM(Col01) - SUM(Col012)) < 0
) AS SubTb



جواب شما کاملا درسته و جواب میده، حالا اگر بخوایم یک شرط هم بزاریم بصورت زیر باید چکار کنیم، من از دستور زیر که استفاده می کنیم شرط رو اصلا نمیبینه و باز کل انتخاب ها رو میاره.


Select SUM(SubTb.Expr1)
From (
SELECT ABS(SUM(Col01) - sum(Col01)) AS Expr1
FROM [dbo].[Table01]
where ( (col04 >0) and (col04 < 5) )
Group By Col03
Having (SUM(Col01) - SUM(Col012)) < 0
) AS SubTb




یعنی این شرط رو هم اضافه کنیم.
where ( (col04 >0) and (col04 < 5) )

pezhvakco
دوشنبه 01 دی 1393, 17:21 عصر
where ( (col04 >0) and (col04 < 5) )
این شرط در Sub query انجام میشه و درست است ولی اگر خروجی پایانی، مورد خواسته شما نیست مشکل از جای دیگه است
یعنی شاید ردیف هایی که با اون شرط پایانی

Having (SUM(Col01) - SUM(Col012)) < 0
همخوانی داشته باشند در این شرط هم جای داشته باشند و یا این شرط شما همه ردیف های جدول را دربرمیگیره .

milad.biroonvand
دوشنبه 01 دی 1393, 17:35 عصر
این شرط در Sub query انجام میشه و درست است ولی اگر خروجی پایانی، مورد خواسته شما نیست مشکل از جای دیگه است
یعنی شاید ردیف هایی که با اون شرط پایانی

همخوانی داشته باشند در این شرط هم جای داشته باشند و یا این شرط شما همه ردیف های جدول را دربرمیگیره .


خروجی پایانی طبق اون دستور اول درسته، ولی من یک شرط دیگه هم دارد که اینه و میخوام این هم اضافه بشه.
where ( (col04 >0) and (col04 < 5) )

pezhvakco
دوشنبه 01 دی 1393, 19:31 عصر
خروجی پایانی طبق اون دستور اول درسته، ولی من یک شرط دیگه هم دارد که اینه و میخوام این هم اضافه بشه.
where ( (col04 >0) and (col04 < 5) )
روش کد نویسی شما درست است و جایی که دستور شرط (همین Where) رو نوشتین هم درست است
=>اگه خروجی پایانی اونی نیست که شما می خواهین، مشکل از شرط های بکار رفته است و نه کد نویسی .

milad.biroonvand
دوشنبه 01 دی 1393, 21:54 عصر
روش کد نویسی شما درست است و جایی که دستور شرط (همین Where) رو نوشتین هم درست است
=>اگه خروجی پایانی اونی نیست که شما می خواهین، مشکل از شرط های بکار رفته است و نه کد نویسی .

خروجی تا قبل از where ها درسته ولی بنظر میاد where اصلا اعمال نمیشه.