Oracle - 计算条件案例

时间:2017-07-19 11:59:26

标签: sql oracle function count conditional-statements

我遇到查询问题。我的目标是获得所有产品名称,质量单位,数量和托盘数量。问题在于物品的托盘数量。

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(*)中做一些条件(这是我认为应该做的)。在表格wms_stock中,我获得了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 个答案:

答案 0 :(得分:1)

您可以在选择列表中尝试以下条件 -

COUNT(DISTINCT ContainerId || ProductId)

仅为了您的信息,||不是运营商,而是Oracle中的连接运算符。所以我只是将两个列连接起来并从中获取不同的颜色。