假设我有一堆货币兑换对。它有4列:
CURR_BOUGHT | AMT_BOUGHT | CURR_SOLD | AMT_SOLD
所以说我们有10英镑,我们交换它为13.33美元,该行将填充:
USD | 13.33 | GBP | 10
我们在各种货币对中拥有大量这些交易。现在说我想知道我在所有交易中买入的美元总额,以及我在所有交易中卖出的美元总额,以及两者之间的差额?是否可以运行打印这3个数字的查询?
这个相当混乱的查询将在单独的行中打印3个数字。我试图得到它,以便在同一行的不同列中打印3个数字。
SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD') UNION
SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD') UNION
SELECT (SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD')) - (SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD')) FROM TRADES;
答案 0 :(得分:1)
上面与联合使用的代码为每行提供了一个结果(联盟的作用是什么 - 将不同的行组添加到一起)。为了使它成为所有一个查询,摆脱工会并使用逗号,使每个单独的查询成为子查询。
SELECT (SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD')) AS AMT_BOUGHT,
(SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD')) AS AMT_SOLD,
(SELECT SUM(AMT_BOUGHT) FROM TRADES WHERE (CURR_BOUGHT = 'USD')) - (SELECT SUM(AMT_SOLD) FROM TRADES WHERE (CURR_SOLD = 'USD')) FROM TRADES AS DIFF;