我想从量获得总那里慈善是0减去量的总和,其中慈善是1总不工作
SELECT SUM(Amount) - (SELECT SUM(Amount)
FROM Transactions
WHERE (Charity = 1))
FROM Transactions
WHERE (Charity = 0)
该查询运行,但不会给我正确的结果。
我想从量获得总那里慈善是0减去量的总和,其中慈善是1总不工作
SELECT SUM(Amount) - (SELECT SUM(Amount)
FROM Transactions
WHERE (Charity = 1))
FROM Transactions
WHERE (Charity = 0)
该查询运行,但不会给我正确的结果。
治疗为阳性的所有值:
SELECT SUM(ABS(Amount)) - (SELECT SUM(ABS(Amount))
FROM Transactions
WHERE (Charity = 1))
FROM Transactions
WHERE (Charity = 0)
但它严重怀疑,否定交易应及时治疗与正面相同。如果有,合法,在该表中负的交易,那么他们也许应该被视为底片(在原始查询),或排除:
SELECT SUM(Amount) - (SELECT SUM(Amount)
FROM Transactions
WHERE (Charity = 1) AND Amount > 0)
FROM Transactions
WHERE (Charity = 0) AND Amount > 0
不知道什么设施SQLite中可用。在标准SQL中,我可能会改写这个为:
SELECT
COALESCE(SUM(CASE WHEN Charity=0 THEN Amount END),0) -
COALESCE(SUM(CASE WHEN Charity=1 THEN Amount END),0)
FROM Transactions
WHERE
Charity in (0,1) AND
Amount > 0
(或类似变换为ABS
版)
在最后一个查询中有一个“SUM(CASE ...)”表达式会返回NULL(因此整个结果将为NULL),以防有只有'Charity = 0'的行或只有'Charity = 1'(当然不一定是OP的情况)。 – 2011-05-22 08:56:40
@Andriy - 好的电话 – 2011-05-22 08:58:18
试试看是否有帮助。
select a.sum1 - b.sum2
from
(SELECT SUM(Amount) as sum1 FROM Transactions WHERE (Charity = 0)) A,
(SELECT SUM(Amount) as sum2 FROM Transactions WHERE (Charity = 1)) B
尝试下面的(我希望这是SQLite中有效):
SELECT (SELECT SUM(Amount) FROM Transactions WHERE (Charity = 0)) -
(SELECT SUM(Amount) FROM Transactions WHERE (Charity = 1))
样的数据?预期成绩?当我们不知道什么是错时,知道如何纠正它有点棘手。 – 2011-05-22 03:57:56
我想我得到了问题..一些价值观是负面的一些是积极的,这就是为什么结果不如预期。我怎样才能让所有的数字被视为正面的? – Ezi 2011-05-22 04:15:35
我们可以通过在'Amount'列中插入一个'ABS()'调用)来处理所有值为正的值,但是它会引发严重的问题,从而导致计算结果是否具有(财务)意义。 – 2011-05-22 04:18:14