问题描述
|
我有一个表AssignmentMaster,其中有以下几列数据
AssignmentID Paidamount refundAmount UserID
1 20 0 1
2 10 5 1
3 30 7 2
4 25 0 3
5 35 15 3
6 10 3 1
7 5 0 3
8 10 0 3
现在我想找出有关userID的TotalNumberofAssignment,即结果应该是:
UserID TotalAssignment TotalAssignmentofrefundAmount TotalPaidamount TotalrefundAmount
1 3 2 40 8
2 1 1 30 7
3 4 1 75 15
如何在MSsql中获得高于给定的结果。
您的任何帮助都会对我有很大帮助。
解决方法
SELECT
UserID,COUNT(AssignmentID) AS TotalAssignment,SUM(SIGN(RefundAmount)) AS TotalAssignmentofRefundAmount,SUM(PaidAmount) AS TotalPaidAmount,SUM(RefundAmount) AS TotalRefundAmount
FROM
MyTable
GROUP BY
UserID
注意:
如果RefundAmount始终> = 0,则SIGN(RefundAmount)
有效。
如果不是,请更改为
SUM(CASE WHEN RefundAmount <> 0 THEN 1 ELSE 0 END) AS TotalAssignmentofRefundAmount
, Select UserID,count(1) as TotalAssignment,sum( case when RefundAmount = 0 then 0 else 1 end) as TotalAssignmentofRefundAmount,sum(PaidAmount) as TotalPaidAmount,sum(RefundAmount) as TotalRefundAmount
From AssignmentMaster
Group by UserID
, 要显示如何使用嵌套SQL做到这一点:
Select UserTotals.UserID,UserTotals.TotalAssignment,Refunds.TotalAssignmentofRefundAmount,UserTotals.TotalPaidAmount,UserTotals.TotalRefundAmount
From (select UserID,Count(AssignmentID) [TotalAssignment],Sum(PaidAmount) [TotalPaidAmount],sum(RefundAmount) [TotalRefundAmount]
From @AssignmentMaster
Group By UserID
) [UserTotals] Left Join
(Select UserID,Count(AssignmentID) [TotalAssignmentofRefundAmount]
From @AssignmentMaster
Where RefundAmount > 0
Group By UserID
) [Refunds] On Refunds.UserID = UserTotals.UserID
, select UserId,count (AssignmentID) as TotalAssignment,sum(case when RefundAmount = 0 then 0 else 1 end) as TotalAssignmentofRefundAmount,sum(PaidAmount) as TotalPaidAmound,sum(RefundAmount) as TotalRefundAmount
from AssignmentMaster
group by UserID;