在将一些旧的 ASP 文件复制到一些较新的 .NET 2.0 代码中时,我遇到了一些问题。其中一项任务是将 4-5 条 SQL 语句合并为一条。虽然我已经做到了这一点并在性能提升方面取得了一些成功,但 Oracle 对我来说是一个新包。然而,这个问题超出了我自己的 SQL 技能,因为我以前没有这样做过。
基本上,我在一堆销售中的一张表中有一个 QUANTITY。每个销售都有一个整数值。每个销售还附有一个项目。每个项目都有一个转换因子,就像我卖 1 袋东西 = 10 捆东西一样。因此,当我运行报告并想找出最终价值时,我需要将每笔销售及其数量乘以它的转换因子。大多数都是简单的 1 对 1,所以它基本上是 25 * 1、30 * 1 等。
我的问题是我的记录中有过去的销售项目已从我们的系统中删除,因此不存在转换因素。这些记录从我的查询中删除,因为 FACTOR 消失了。
SELECT rth.CODE, rth.NUMBER, rth.QUANTITY, rth.sale_code
FROM salesdetails rth, salesheader rsh
WHERE rsh.number = rth.number(+)
AND rsh.customer_code = '05'
AND rsh.r_code = '01'
AND rsh.location_code = '12'
AND rth.sale_code IN('ITEM07')
AND rth.c_code = 'WLMT'
AND rsh.year = '2008'
这是我的第一个查询。如果我将转换添加到:
SELECT rth.CODE, rth.NUMBER, rth.QUANTITY, rth.sale_code, rth.quantity * cf.conversion
FROM salesdetails rth, salesheader rsh, conversionfactor cf
WHERE rsh.number = rth.number(+)
AND rsh.customer_code = '05'
AND rsh.r_code = '01'
AND rsh.location_code = '12'
AND rth.sale_code IN('ITEM07')
AND rth.c_code = 'WLMT'
AND rsh.year = '2008'
AND cf.item_code = rth.item_code
and cf.code = '01'
and cf.loc_code = '00001'
这在一定程度上有效。它列出了所有相同的记录,但缺少任何不存在 CONVERSION 因素的记录。无论如何,我仍然可以在第二个查询中包含 FACTOR 不存在的那些记录,而不是逐行进行转换并以这种方式进行转换。