【问题标题】:NULL from SUM function来自 SUM 函数的 NULL
【发布时间】:2015-04-14 13:56:14
【问题描述】:

我正在处理一项任务,该任务要求我将两行插入到表中,每行包含一个计算字段。除了 P.CODE 之外,这两个语句都是相同的,但尽管如此,一个 SQL 语句的计算字段的值之一显示为空。我检查了包含 SUM 中使用的值之一的产品表,没有发现任何异常。谁能弄清楚为什么我的一个语句得到 null 值而不是另一个?

SQL

INSERT INTO line(inv_number, line_number, p_code, line_units, line_price)
  VALUES(1009, 1, '23109-HB', 5, (SELECT SUM(p_price * line_units) 
                                  FROM product JOIN line USING (P_CODE)
                                  WHERE p_code = '23109-HB'));

    --LINE_PRICE OF NULL BEING INSERTED HERE
INSERT INTO line(inv_number, line_number, p_code, line_units, line_price)
  VALUES(1009, 2, '14-Q1/L3', 2, (SELECT SUM(p_price * line_units) 
                                  FROM product JOIN line USING (P_CODE)
                                  WHERE p_code = '14-Q1/L3'));

输出

1009    1   23109-HB    5   49.8
1009    2   14-Q1/L3    2   (null)

SUM 函数中使用的产品表中的数据

14-Q1/L3    9.00-in. pwr. saw blade 12-FEB-14   18  12  17.5    0   21344
23109-HB    Claw hammer 19-FEB-14   23  10  9.95    0.1 21225

**更新 我想我可能已经弄清楚了,它实际上非常明显而且有点尴尬。 “行”表中有一行,其 p_code 值已经为 23109-HB,因此它对该行的字段执行了计算。但是,行表中没有 p_code 值为 14-Q1/L3 的行,因此 SQL 语句的 line_price 评估为 NULL!有没有办法可以将 SUM 与来自同一插入语句的数据一起使用,或者这些值是否必须存在于表中? (对不起,如果这是一个不好的问题,我是新人)

【问题讨论】:

  • 你有这个 p_code = '14-Q1/L3' 吗?
  • 或者对于 p_code = 14-1/L3,line_units 是否为 0?
  • @sqluser 感谢您的回复-请参阅上面的编辑
  • “SUM 与来自同一插入语句的数据”是什么意思?你能澄清一下吗?
  • 所以我有这个显然可以工作的语句.. INSERT INTO line(inv_number, line_number, p_code, line_units, line_price) VALUES(1009, 1, '23109-HB', 5, (SELECT SUM(p_price * 5) FROM product WHERE p_code = '23109-HB')); 我在那个语句中有两次 5 - 一次将其插入 line_units 列,一次插入 sum 函数以生成一行价格。我想知道我是否可以有一个 sql 语句来引用同一语句中的 line_units,如果这有意义.. @sqluser

标签: sql oracle


【解决方案1】:

如果我理解您的要求,您可以使用WITH 子句来实现:

WITH C AS(
    SELECT p_code, p_price, line_units 
    FROM product JOIN line USING (P_CODE)
    WHERE p_code = '23109-HB'
)
INSERT INTO line(inv_number, line_number, p_code, line_units, line_price)
  SELECT 1009, 1, p_code, line_units, SUM(p_price * line_units) FROM C 

【讨论】:

  • 这很麻烦,但这就是我想要的!谢谢!
猜你喜欢
  • 1970-01-01
  • 2019-09-28
  • 2014-01-28
  • 1970-01-01
  • 2012-05-04
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多