SQL SUM 受限

Posted

技术标签:

【中文标题】SQL SUM 受限【英文标题】:SQL SUM restricted 【发布时间】:2015-02-14 11:11:06 【问题描述】:

我有一个从多个表中收集数据的视图。让我们认为它是这样的:

 TransPK   Amount    Currency_ID
 -------------------------------
 1         2000      0
 1         -2000     0
 2         3600      1
 2         -7200     2
 . . .

我想计算每个不同 TransPK 的总和(金额),但仅在给定 TransPK 的所有 Currency_ID 相同的情况下。即在上面的数据中只会返回一个结果,因为对于 TransPK=2,Currency_ID 有两个值。

我不知道该搜索什么!我试过“”,但命中没有用。我不是第一个想做这种事情的人。有人能指出我正确的方向吗?

【问题讨论】:

【参考方案1】:

你需要这样的东西

SELECT TransPK, Currency_ID, SUM(Amount)
FROM Your_Table
GROUP BY TransPK, Currency_ID

有关多列分组的更多信息,请查看Using group by on multiple columns

【讨论】:

【参考方案2】:

试试这个:

SELECT TransPK, SUM(Amount)
FROM tableA 
GROUP BY TransPK
HAVING COUNT(DISTINCT Currency_ID) = 1;

查看SQL FIDDLE DEMO

输出

| TRANSPK | AMOUNT |
|---------|--------|
|       1 |      0 |
|       3 |   3000 |

【讨论】:

SQL 要求我将 Currency_ID 添加到 GROUP BY 子句中,我仍然得到 TransPK=2 的结果 :-( 该死,这个看起来很有希望!!!【参考方案3】:

我想这就是你所追求的:

SELECT TransPK, SUM(Amount) AS Amount, Currency_ID
FROM TableName
GROUP BY TransPK, Currency_ID
HAVING COUNT(Currency_ID) > 1

结果:

TRANSPK AMOUNT  CURRENCY_ID
1       0       0   

SQL Fiddle 中查看结果。

【讨论】:

我认为这通常不适用于我的数据。在此视图中,事务可以有任意数量的条目 (>= 2)。这不会仅限于只有 2 个条目的条目吗? @skiaddict1:你试过我更新的答案了吗? (Currency_ID)>1.

以上是关于SQL SUM 受限的主要内容,如果未能解决你的问题,请参考以下文章

通过 JDBC 在受限环境中通过流式处理或批处理处理整个 SQL 表

oracle行转列sql怎么写?

sql sum 空值

sql sum求和,如果为空显示为0

sql语句求和

SQL-W3School-函数:SQL SUM() 函数