大家好,我们需要查询帮助。请考虑下表
alt text http://i26.tinypic.com/1ot0d0.jpg
我需要先从表中选择每个代码的总和。我是用简单的总和和分组声明来做的。然后我必须从每个代码总和中减去 type ='r'
的结果1)对于查询的第一部分,我们将从SUM获得2行(一行总计为USD,一行总计为YEN)
2)现在我需要从这些结果中减去相应的USD,YEN值,其中Type ='r'
任何线索的家伙?我必须在SQL内部而不是存储过程中执行此操作。
答案 0 :(得分:4)
为什么不使用WHERE语句来说WHERE Type != 'r'
,以便这些值在第一时间甚至不会被添加到总和中...
SELECT `Code`, SUM(`Amount`) AS `Total`
FROM `Table`
WHERE `Type` != 'r'
GROUP
BY `Code`;
类似的东西。
答案 1 :(得分:1)
select code, l.amount - r.amount
from
(select code, sum(amount) as amount from my_table group by code) l
left join (select code, sum(amount) as amount from my_table where type = 'r' group by code) r
on l.code = r.code
答案 2 :(得分:1)
您可以在一个简单的查询中执行此操作:
select
code,
sum(case when type = 'r' then (-1 * amount) else amount end) as sum
from
yourtable
group by
code
基本上,您正在更改type ='r'的行的符号,因此当您对特定代码的所有行求和时,您将得到正确的答案。
答案 3 :(得分:0)
是否必须是单个查询?
我说SUM总和,然后SUM子类别= Type ='r',然后从另一个中减去一个。
你可以在一行SQL中执行此操作,但我很确定它可以将表连接到自身或使用子查询。无论哪种方式,它都在做与上述相同的工作量。
答案 4 :(得分:0)
尝试:
select code,
sum(amount) gross_total,
sum(case when type = 'r' then amount else 0 end) type_r_total,
sum(case when type != 'r' then amount else 0 end) net_total
from yourtable
group by code;
查看总计,在一次过程中,每种货币在一行中输入每个货币的仅R总计和非R类总计。