我相信有一种方法可以做到这一点,但我不像许多其他人那样熟悉 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