簡體   English   中英

如何計算 Oracle 中多列的總和

[英]How to calculate sum of multi column in Oracle

我正在使用 oracle SQL 來計算我數據庫中某個列的值,這是我的 LOG0104M 表,其中包含值:

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查詢中沒有 Boolean 數據類型。

我猜你只是想要:

(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM