如何根据2个单独的行和列中的共享值对值进行求和

时间:2015-12-09 17:23:34

标签: sql sql-server tsql

我致力于将另一家公司的数据制作成我们可以使用的格式。 为了计算会费,我使用此代码创建了一个新表。

SELECT 
    ROW_NUMBER() OVER(PARTITION BY a.memid ORDER BY a.nexttrandate DESC) as 'RowNum', 
    a.memid as 'memid' , 
    a.nexttrandate as 'date', b.status as 'status', 
    SUM(convert(decimal(18,2),a.price)) as 'price', a.billtoid as 'parentid'
INTO
    lame
FROM  
    arrr a 
JOIN 
    members b ON a.memid = b.memid
GROUP BY 
    a.memid, a.billtoid, a.nexttrandate, b.status;

此表创建的内容基本上是一个交易历史记录,也显示下一个结算日期。这就是为什么我做Rownum并按交易日期订购,所以我可以使用RowNum ='1'来获得最新的。

这主要完成了我的需要。

但是我得到的数据看起来像这样。

memid    date   parentid    price
_____    ____   ________    _____
  1      2012       1        59
  2      2012       1        40

我需要根据与memid相同的parentid添加这两个价格。我不介意如果两个值都出现在99作为另一个简单的更新,我可以使第二个0

我发现了一个帖子并做了变化。

UPDATE lame
SET price = temp2.pricesum 
FROM lame
INNER JOIN 
(SELECT arrr.memid, SUM(convert(decimal(18,2),arrr.price)) as pricesum, 
arrr.billtoid, arrr.nexttrandate
FROM arrr WHERE arrr.nexttrandate = arrr.nexttrandate and arrr.billtoid = arrr.memid
GROUP BY arrr.memid, arrr.billtoid, arrr.nexttrandate) as temp2
ON temp2.memid = lame.memid;

基本上arrr.billtoid = arrr.memid是我天真的想要将这些添加到一起的地方,但显然不会起作用。它所引用的只是当memid和billtoid在一行中相同时。

有没有办法让上面的表格加在一起?

抱歉格式不正确。

是的,我意识到我可能正在努力实现这一目标。

1 个答案:

答案 0 :(得分:0)

鉴于你的输出,这不是答案吗?

select A.memid, B.date, B.parentid, sum(B.price)
from ( [giant query] ) as A
join ( [giant query] ) as B
on A.memid = B.parentid
group by A.memid, B.date, B.parentid