我正在尝试找到一种方法来在一个小数据集中加总一美元金额,但仅限于某些行。这些数据是从我无法改变的另一个系统中提取的。这将用于一次性数据导入SQL,因此非常高效且低优先级。我需要将特定人员ID为同一事件代码支付两笔或更多笔的行相加。
在数据中,除AmountPaid和DatePaid外,付款人的所有列(许多未显示)都相同。我想要SUM AmountPaid(如果可能的话,获得DatePaid的MAX)。
数据如下所示:
EventCode | PersonID | DatePaid | AmountPaid
****
EventA | Person123 |2017-01-01 | $50
EventA | Person456 |2017-02-01 | $100
EventA | Person123 |2017-02-02 | $50
EventB | Person123 |2016-01-01 | $100
EventC | Person456 |2017-07-07 | $200
EventC | Person123 |2017-08-08 | $200
我需要做的只是Person123对EventA的支付总额 - 总计应该是100美元(50 + 50),所以我可以将其作为一次付款交易导入。
理想的结果是这样的:
EventCode | PersonID | DatePaid | AmountPaid
****
EventA | Person456 |2017-02-01 | $100
EventA | Person123 |2017-02-02 | $100
EventB | Person123 |2016-01-01 | $100
EventC | Person456 |2017-07-07 | $200
EventC | Person123 |2017-08-08 | $200
谢谢,
答案 0 :(得分:1)
试试这个,它会为你带来什么?
Select
SQ.ID
,SQ.EventCode
,SQ.PersonID
,SQ.Datepaid
,SUM(SQ.Amountpaid)
,MAX(SQ.Amountpaid)
From
(
Select
Cast(EventCode As Varchar(20)) +'-'+Cast(PersonID As Varchar(20)) +'-'+Cast(DatePaid As Varchar(20)) AS 'ID'
,EventCode
,PersonID
,Datepaid
,AmountPaid
From [TableNAme]
Group By
Cast(EventCode As Varchar(20)) +'-'+Cast(PersonID As Varchar(20)) +'-'+Cast(DatePaid As Varchar(20))
,EventCode
,PersonID
) As SQ
Group By
SQ.ID
,SQ.EventCode
,SQ.PersonID
,SQ.Datepaid
要选择所有列,以下内容可能适用于您
Select
*
,SUM(SQ.Amountpaid)
,MAX(SQ.Amountpaid)
From
(
Select *
,Cast(EventCode As Varchar(20)) +'-'+Cast(PersonID As Varchar(20)) +'-'+Cast(DatePaid As Varchar(20)) AS 'ID'
From [TableNAme]
Group By
Cast(EventCode As Varchar(20)) +'-'+Cast(PersonID As Varchar(20)) +'-'+Cast(DatePaid As Varchar(20))
,EventCode
,PersonID
) As SQ
Group By
SQ.ID
,SQ.EventCode
,SQ.PersonID
,SQ.Datepaid
答案 1 :(得分:1)
如果您在评论中提到的表格中有更多列,而且这是一次tassk,您可以尝试以下
SELECT DISTINCT
EventCode,
PersonID,
DatePaid = (SELECT MAX(DatePaid) FROM YourTable t2 WHERE t1.EventCode = t2.EventCode AND t1.PersonID = t2.PersonID) ,
AmountPaid= (SELECT SUM(AmountPaid) FROM YourTable t2 WHERE t1.EventCode = t2.EventCode AND t1.PersonID = t2.PersonID)
//select other 100+ columns
FROM YourTable t1