你好家伙需要帮助的查询。请看下面的表格帮助与SQL查询
alt text http://i26.tinypic.com/1ot0d0.jpg
我需要从表中首先选择每个代码的总和。我正在用简单的总和和声明来分组。然后,我必须减去从每个代码总和其中类型=“R”
1)假设查询的第一部分的结果,我们将得到2行从SUM(一个具有总USD和一个用总YEN)
2)现在我需要从这些结果中减去相应的USD,其具有类型=“R”
任何线索人YEN值?我必须在SQL内部而不是存储过程。
你好家伙需要帮助的查询。请看下面的表格帮助与SQL查询
alt text http://i26.tinypic.com/1ot0d0.jpg
我需要从表中首先选择每个代码的总和。我正在用简单的总和和声明来分组。然后,我必须减去从每个代码总和其中类型=“R”
1)假设查询的第一部分的结果,我们将得到2行从SUM(一个具有总USD和一个用总YEN)
2)现在我需要从这些结果中减去相应的USD,其具有类型=“R”
任何线索人YEN值?我必须在SQL内部而不是存储过程。
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
它是否必须是单个查询?
我会说总和总和,然后SUM子类别其中Type ='r',然后减去另一个。
你可能在一行SQL中这样做,但我敢肯定它会加入表本身或使用子查询。无论哪种方式,它都在做与上面相同的工作量。
感谢您的回复,是的,它需要在一个单一的查询。我很困惑如何减去子类别相等的地方)。 Duh,我有一个投票下来我的问题:( – 2010-07-13 06:03:39
为什么不使用WHERE语句说WHERE Type != 'r'
使这些值甚至从来没有被添加在首位总结...
SELECT `Code`, SUM(`Amount`) AS `Total`
FROM `Table`
WHERE `Type` != 'r'
GROUP
BY `Code`;
类似的东西。
谢谢animuson,很好的一点。这只是一个简单的示例表。在实际的表格和场景中,我必须减少并以某种方式显示结果,需求有点 – 2010-07-13 06:16:54
这似乎是一个很好的解决方案,为什么不添加更多的信息,如果需求有点不同 – mcha 2010-07-13 07:19:29
您可以在一个单一的,简单的查询做到这一点:
select
code,
sum(case when type = 'r' then (-1 * amount) else amount end) as sum
from
yourtable
group by
code
基本上,你改变具有类型=“R”行的标志,所以当你总结的所有行对于特定的代码,你会得到正确的答案。
这是不正确的,你会得到美元= 1003而不是2003年 – Toto 2010-07-13 08:33:56
尝试:
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的总数,在单次通过。
一个字?真棒:) – 2010-07-15 06:49:48