根据T-SQL中的货币获取单独的金额

时间:2017-04-06 12:50:26

标签: sql-server tsql

所以我有一张表如下

Person      Currency      Price
Steve       GBP           10
Steve       GBP           20
Steve       EUR           30
Dave        USD           10
Dave        USD           10
Dave        EUR           20
John        EUR           30
John        GBP           20
John        USD           30

我希望有一个输出视图,根据货币消耗的金额总结每个客户,如下所示:

Person      Currency       Amount
Steve       GBP            30
Steve       EUR            30
Dave        USD            20
Dave        EUR            30
John        EUR            30
John        GBP            20
John        USD            30

我做了什么

到目前为止,我尝试过这样的查询:

SELECT  
Person,
Currency,
SUM(Price) As Amount

FROM Table
GROUP BY Currency

这样做的逻辑是,它会根据他们的货币对它们进行排序,但这没有用,它还告诉我需要在GROUP BY子句中添加更多内容。我错过了什么?

更新

到目前为止,所有评论都很棒,但我遗漏了一些细节。

货币是一对,即美元/英镑,为了选择我需要的货币,我使用的是LEFT功能

示例:

LEFT(CURRENCYPAIR,3) AS Currency,

这导致了这样的列表:

AUD
GBP
EUR
USD
USD
USD

4 个答案:

答案 0 :(得分:3)

使用以下GROUP BY查询:

SELECT  Person,Currency,SUM(Price) As Amount
FROM Table
GROUP BY Person ,Currency

答案 1 :(得分:2)

您必须正确使用GROUP BY clausule:

SELECT  
    Person,
    LEFT(CURRENCYPAIR,3) AS Currency,
    SUM(Price) As Amount        
FROM Table
    GROUP BY Person,LEFT(CURRENCYPAIR,3)

答案 2 :(得分:1)

你非常接近。请试试......

SELECT Person,
       Currency,
       SUM(Price) As Amount
FROM Table
GROUP BY Person,
         Currency;

根据您的问题,数据首先由客户分组,然后按货币分类。之后,您需要与该客户/货币分组相关联的价格总和。

首先执行上述GROUP BY,然后对每个子组中包含的数据执行SUM()等聚合函数。

另外,请考虑为您的表提供比Table更好的名称。我建议像ClientCurrencyExpenditure,tblClientCurrencyExp等

答案 3 :(得分:1)

试试这个,

选择
人, 货币, SUM(Price)As TotalSumOfCurrencyByPerson

FROM Table GROUP BY Person,LEFT(CURRENCYPAIR,3)

第一个问题是你只按货币分组,因为只有四种类型可以给你所有英镑,澳元,美元和欧元的总和。您需要在查询中添加另一层分组,以便按人员对每种货币求和。

第二个问题是你还需要按照你选择的“LEFT(CURRENCYPAIR,3)”进行分组。

希望这有帮助!