微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

子查询中的分组依据

如何解决子查询中的分组依据

| 我有一个表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;
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。