帮助sql查询

时间:2010-07-13 05:56:57

标签: sql db2

大家好,我们需要查询帮助。请考虑下表

alt text http://i26.tinypic.com/1ot0d0.jpg

我需要先从表中选择每个代码的总和。我是用简单的总和和分组声明来做的。然后我必须从每个代码总和中减去 type ='r'

的结果

1)对于查询的第一部分,我们将从SUM获得2行(一行总计为USD,一行总计为YEN)

2)现在我需要从这些结果中减去相应的USD,YEN值,其中Type ='r'

任何线索的家伙?我必须在SQL内部而不是存储过程中执行此操作。

5 个答案:

答案 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类总计。