2017-07-19 63 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之间添加分隔符,例如'数据筒|| '#' || ProductId'。否则,ContainerId = 1 ProductId = 11与ContainerId = 11 ProductId = 1位于同一组中。 –

+0

@FrankOckenfuss,谢谢你让我知道这个小窍门。我将来会记得这一点。 –