SUM函数为NULL

时间:2015-04-14 01:31:50

标签: sql oracle

我正在处理一项要求我在表格中插入两行的作业,其中每行包含一个计算字段。除了P.CODE之外,这两个语句都是相同的,但尽管如此,一个SQL语句中计算字段的值之一显示为null。我检查了产品表,其中包含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与来自同一insert语句的数据一起使用,或者这些值是否必须存在于表中? (对不起,如果这是一个糟糕的问题,我是新的)

1 个答案:

答案 0 :(得分: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