2016-09-23 29 views
0

我有一個大致如下兩個表:如何在SQL中每次只有一次SUM SUM?

表A

DocumentId (*is unique) DocumentDate 
1      2016-01-01 
2      2016-01-01 
3      2016-02-01 
4      2016-03-01 

和表B

ContractId SnapshotTimeId NetFinanced 
1   20160231  300 
1   20160331  300 
1   20160431  300 
2   20160231  450 
2   20160331  450 
2   20160431  450 
3   20160331  500 
3   20160431  500 
4   20160431  150 

我想決賽桌看起來是這樣的:

DocumentDate NetFinanced 
2016-01-01 750 
2016-02-01 500 
2016-03-01 150 

我試過以下它不起作用:

SELECT A.DocumentDate, SUM(B.NetFinanced) 
FROM A 
JOIN B on B.ContractId=A.DocumentId 
GROUP BY A.DocumentDate 

任何想法?在此先感謝

+0

你應該閱讀有關'GROUP BY'。 – DavidG

+0

是日期時間還是日期字段? – GuidoG

+0

輸出結果如何?你能解釋一下嗎? – Susang

回答

1

你可以使用不同的

SELECT A.DocumentDate, 
     SUM(B.NetFinanced) 
FROM A 
     JOIN (SELECT DISTINCT 
         ContractId, 
         NetFinanced 
       FROM  B 
      ) B ON B.ContractId = A.DocumentId 
GROUP BY A.DocumentDate 

這樣做的結果會有所不同,如果NetFinanced量每SnapshotTimeId

,如果你想在最近NetFinanced量,您可以使用ROW_NUMBER改變( )來訂購這些值。

SELECT A.DocumentDate, 
     SUM(B.NetFinanced) 
FROM A 
     JOIN (SELECT ROW_NUMBER() OVER (PARTITION BY ContractId ORDER BY SnapshotTimeId DESC) Rn, 
         ContractId, 
         NetFinanced 
       FROM  B 
      ) B ON B.ContractId = A.DocumentId AND B.Rn = 1 
GROUP BY A.DocumentDate 
0

你有你想要什麼NetFinanced重複值表B,當然結果不會給你。您需要從表B加入與ContractIdNetFinanced列中的唯一值(我假設)表A:

SELECT A.DocumentDate, 
     SUM(B.NetFinanced) NetFinanced 
FROM dbo.TableA A 
INNER JOIN (SELECT DISTINCT ContractId, NetFinanced 
      FROM dbo.TableB) B 
    ON A.DocumentId = B.ContractId 
GROUP BY A.DocumentDate; 
0

嘗試像這樣

SELECT A.DocumentDate, SUM(B.NetFinanced) 
FROM A 
JOIN (SELECT MAX(ContractId) ContractId, MAX(SnapshotTimeId)SnapshotTimeId, 
      MAX(NetFinanced)NetFinanced 
     FROM B GROUP BY ContractId) B ON B.ContractId = A.DocumentId 
GROUP BY A.DocumentDate