分组在子查询中

时间:2011-06-14 12:18:02

标签: sql sql-server

我有一个表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中获得上述结果。 你的任何帮助都会对我有所帮助。

4 个答案:

答案 0 :(得分:4)

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始终> gt = = 0,则

SIGN(RefundAmount)有效。

如果没有,请转到

SUM(CASE WHEN RefundAmount <> 0 THEN 1 ELSE 0 END) AS TotalAssignmentofRefundAmount

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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;

答案 3 :(得分:1)

要说明如何使用嵌套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