gpt4 book ai didi

sql - ORACLE SQL : Need to sum two values, 但一个可能不存在...这可能吗?

转载 作者:行者123 更新时间:2023-12-04 07:11:18 25 4
gpt4 key购买 nike

我在将一些旧的 ASP 文件复制到一些较新的 .NET 2.0 代码中时遇到了一些问题。其中一项任务是将 4-5 条 SQL 语句合二为一。虽然我已经这样做了并且在性能提升方面取得了一些成功,但 Oracle 对我来说是一个新包。然而,这个问题超过了我自己的 SQL 技能,因为我以前没有这样做过。

基本上,我在一堆销售中的一张 table 上有一个 QUANTITY。每个销售都有一个整数值。每笔销售还附有一个 ITEM。每个 ITEM 都有一个 CONVERSION 因素,就像我卖 1 袋东西 = 10 包东西一样。因此,当我运行报告并想要找出最终值(value)时,我需要将每笔销售额及其数量乘以转换系数。大多数都是简单的 1 比 1,所以它基本上是 25 * 1、30 * 1 等。

我的问题是我的记录中有过去的销售,其中 ITEM 已从我们的系统中删除,因此不存在 CONVERSION 因素。这些记录从我的查询中删除,因为 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'

这是我的第一个 QUERY。如果我将转换添加到:
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 的记录,而不是逐行进行转换并以这种方式进行转换。

最佳答案

您还可以使用 Coalesce 函数和子查询...

< Coalesce(arg0, arg1, arg2, ..... etc argN)

依次计算每个参数并返回它找到的第一个不是 Null 的参数。 >

Select D.CODE, D.NUMBER, D.QUANTITY, D.sale_code, 
D.quantity * Coalesce((Select conversion
From conversionfactor
Where item_code = H.item_code
And code = '01'
And loc_code = '00001'), 1.0)
From salesheader H
Left Join salesdetails D
On D.Number = H.Number
Where H.customer_code = '05'
And H.r_code = '01'
And H.location_code = '12'
And H.year = '2008'
And D.sale_code In ('ITEM07')
And D.c_code = 'WLMT'

当记录不再在转换因子表中时,将子查询末尾的 1.0 替换为您希望转换因子的“默认”值...

关于sql - ORACLE SQL : Need to sum two values, 但一个可能不存在...这可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/299176/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com