当前位置:  开发笔记 > 后端 > 正文

ORACLE SQL:在一个语句中依赖于CODE的多个SUMS

如何解决《ORACLESQL:在一个语句中依赖于CODE的多个SUMS》经验,为你挑选了1个好方法。

我相信有一种方法可以做到这一点,但我不像其他人那样熟悉ORACLE 10g.这是场景:

我目前正在将经典ASP页面转换为ASP.net 2.0.我有一个创建报告的查询.它报告了销售额与之前的销售额.目前发生的事情是一个查询将进入数据库并获取销售我们产品的完整位置列表.然后,它遍历每个位置的行,并在SQL中运行一些求和操作.

它会转到其他几个表,总结销售数量,然后将总和添加到表行等.由于位置查询返回了大量结果,查询需要2-3分钟.

我的问题是如何将这些全部合并到一个查询中.

地点查询:

SELECT DISTINCT t.location, 
  l.city, 
  f.year, 
  f.customer FROM loc t, 
location l, father_table f 
WHERE f.number = t.number(+) 
AND f.code = '0001' 
AND f.c_code = '01' 
AND t.location= l.code(+) 
AND t.code IN ('C', 'S') 
AND t.co_code IN ('G', 'V', 'A', 'D') 
AND t.year = '2008' 
ORDER BY l.city, f.year

上述查询中每个行的总和查询是:

SELECT SUM(nvl(t.sale_quantity,0)) sale_quantity 
FROM loc t, father_table f  
WHERE f.number = t.number(+) 
AND f.code = '0001' 
AND f.c_code = '01'
AND f.year = '2008' 
AND t.code = 'C' 
AND t.location = '1566' <----- EACH ROW'S t.location VALUE
AND t.co_code IN ('G', 'V', 'A', 'D') 
GROUP BY t.location, t.code, f.year

而不是循环遍历原始查询的每个记录,有没有一种方法可以组合查询并在Location的查询中包含SUM.这里的关键是,当t.code ='C'而不是'C'和'S'时,第二个查询只获得销售额SUM



1> Dave Costa..:

我认为这样做你想要的.如果它不完全正确,我认为你需要知道的关键是CASE表达; 这是一种在SUM函数中进行过滤的方法.

SELECT t.location, 
  l.city, 
  f.year, 
  f.customer,
  SUM( NVL( CASE WHEN t.code ='C' THEN t.sale_quantity ELSE 0 END, 0)) sale_quantity
FROM loc t, location l, father_table f 
WHERE f.number = t.number(+) 
AND f.code = '0001' 
AND f.c_code = '01' 
AND t.location= l.code(+) 
AND t.code IN ('C', 'S') 
AND t.co_code IN ('G', 'V', 'A', 'D') 
AND t.year = '2008' 
GROUP BY t.location, l.city, f.year
ORDER BY l.city, f.year

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有