2017-07-19 29 views
0

質問に問題があります。私の目標は、製品名、質量の単位、数量、パレットの数を取得することです。問題はアイテムのパレットの数です。Oracle - 条件条件ケース

QUERY:

SELECT "Product_Name" 
     , "Unit_of_Mass" 
     , SUM("Quantity_Per_UOM") 
     , Count(*) as "Number_Of_Pallet" 
FROM 
    (select p.prod_desc as "Product_Name" 
      , s.quantity as "Quantity_Per_UOM" 
      , u.description as "Unit_of_Mass" 
      , s.container_id 
      , s.product_id 
    from wms_stock s 
    join wms_product p on p.product_id = s.product_id 
    join wms_uom u on p.uom_base_id = u.uom_id 
    ) 
group by "Product_Name", "Unit_of_Mass" 

それはほとんど動作します。問題はCount(*)で何らかの条件を実行する必要があることです(これは私がやるべきことだと思います)。テーブルにはproduct_idcontainer_idがありますが、いくつかの行に同じものがある場合は、パレットの数を1と数えますが、依然として数量を追加する必要があります。最初からそう

選択:

Product_Name | Quantity | UnitOfMass | ContainerId | ProductId 
A   |  2 | kg   |   10 |  11 
A   |  1 | kg   |   10 |  11 
B   |  2 | kg   |   11 |  12 

を私はあなたの選択リストに条件の下に試すことができます

Product_Name | Quantity_Per_UOM | UnitOfMass | Number_Of_Pallet 
A   |    3 | kg   |    1 
B   |    2 | kg   |    1 
+1

あなたは 'COUNT(DISTINCT Number_Of_Pallet) 'を試すことができます。 –

+0

その結果、Number_Of_Palletの結果は1となりました。カウントと条件に問題はないかもしれません。 –

+1

これを試してください - 'COUNT(DISTINCT ContainerId || ProductId)' –

答えて

1

結果を取得する必要 -

COUNT(DISTINCT ContainerId || ProductId) 

ちょうどあなたの情報については、||をオペレータではなく、Oracleの連結演算子です。だから、私はちょうど両方の列を連結して、それらとは別のものを拾った。

+2

ContainerIdとProductIdの間に区切り文字を追加する必要があります。 'ContainerId || '#' || ProductId'。それ以外の場合はContainerId = 1 ProductId = 11はContainerId = 11 ProductId = 1と同じグループにあります。 –

+0

@FrankOckenfuss、この小さなトリックを教えてくれてありがとう。私はこれからも同じことを覚えています。 –