Oracle中如何计算多列的总和

How to calculate sum of multi column in Oracle

我正在使用 oracle SQL 计算数据库中某些列的值 这是我的 LOG0104M table 值:

PRODUCT_CODE   PRODUCT_NAME   PACKING_STYLE   TOTAL_QUANTITY   QUANTITY_IN_FULL_CTN   SPAREBOX
  3300099        AP-1516D       30                  50                1                  NULL
  3330000        NEOSENSE       60                  20                1                  NULL

条件:

1. Fullbox =  (total_quantity / packing style)
2. SpareBox: (Base on value of Spare_Quantity)
 Spare_quantity = total_quantity - fullBox * packing_style.
    If spare qty = 0 => spare box = 0
    If spare qty > 0 => spare box = 1.
 

这是我的查询:

WITH BOXCOUNT AS (SELECT ROUND(SUM(TOTAL_QUANTITY/PACKING_STYLE)) AS FULLBOX FROM LOG0104M)
SELECT
  L55.PRODUCT_CODE 
  , L55.PRODUCT_NAME 
  , L55.TOTAL_QUANTITY
  , L55.PACKING_STYLE
  , L55.QUANTITY_IN_FULL_CTN
  , L55.SPAREBOX
  , BC.FULLBOX

  ,CASE 
      WHEN SUM(L55.TOTAL_QUANTITY - BC.FULLBOX * L55.PACKING_STYLE) = 0  THEN L55.SPAREBOX = 0
      WHEN SUM(L55.TOTAL_QUANTITY - BC.FULLBOX * L55.PACKING_STYLE) != 0 THEN L55.SPAREBOX = 1
   END AS SPARE_QUANTITY

 FROM LOG0104M L55, BOXCOUNT BC
 GROUP BY 
    L55.PRODUCT_CODE
    , L55.PRODUCT_NAME
    , L55.TOTAL_QUANTITY
    , L55.PACKING_STYLE
    , L55.QUANTITY_IN_FULL_CTN
    , BC.FULLBOX
    , L55.SPAREBOX

(已更新)

在条件 CASE WHEN 中,SPARE_QUANTITY 的总和:

if sum of SPARE_QUANTITY = 0 => SpareBox column will be 0, 
     and sum of SPARE_QUANTITY != 0 => SpareBox column will be 1

在运行查询时,出现如下错误:

SQL Error [905] [42000]: ORA-00905: missing keyword

好像第12、13、14行出错了,请问如何解决,非常感谢

CASE 表达式中的 THEN 子句不正确:

CASE WHEN SUM(L55.TOTAL_QUANTITY - BC.FULLBOX * L55.PACKING_STYLE) = 0  
     THEN L55.SPAREBOX = 0
----------^
     WHEN SUM(L55.TOTAL_QUANTITY - BC.FULLBOX * L55.PACKING_STYLE) != 0 
     THEN L55.SPAREBOX = 1
END AS SPARE_QUANTITY

Oracle 在 SELECT 查询中没有布尔数据类型。

我猜你只是想要:

(CASE WHEN SUM(L55.TOTAL_QUANTITY - BC.FULLBOX * L55.PACKING_STYLE) = 0  
      THEN 0
      WHEN SUM(L55.TOTAL_QUANTITY - BC.FULLBOX * L55.PACKING_STYLE) <> 0 
      THEN 1
 END) AS SPARE_QUANTITY

或者,如果你想消除 CASE:

ABS(SIGN(SUM(L55.TOTAL_QUANTITY - BC.FULLBOX * L55.PACKING_STYLE))) AS SPARE_QUANTITY