2016-12-20 5 views
1

원본 쿼리는 259 개의 행을 반환합니다. 수정 한 후 쿼리는 271 개의 행을 반환합니다. 이 12 개의 행은 중복됩니다. 어떻게 이것을 피할 수 있습니까? 당신의 도움을 주셔서 감사합니다!!쿼리 수정 후 중복 행

쿼리 (굵게 수정) : 나는 대답으로 공식화하려고

select "Item", "Expires", "Lot #", "Subinv", "Locator", "Qty", "UOM", "Lead Time" 
,(select count(*) from MTL_KANBAN_CARDS_V kb where exp.inventory_item_id = kb.inventory_item_id and kb.card_status_name <> 'Hold') "Kanban Cards (Not On Hold)" 
FROM (
SELECT msi.inventory_item_id 
,msi.segment1        "Item" 
,mln.expiration_date      "Expires" 
,mln.lot_number       "Lot #" 
,moqd.subinventory_code     "Subinv" 
,mil.segment1        "Locator" 
,sum(moqd.primary_transaction_quantity) "Qty" 
,msi.primary_uom_code      "UOM" 
**,muc.conversion_rate      "UOM Conversion Rate"** 
,msi.FULL_LEAD_TIME      "Lead Time" 

FROM mtl_system_items_b msi 
,mtl_onhand_quantities_detail moqd 
,mtl_lot_numbers mln 
,mtl_item_locations mil 
**,mtl_uom_conversions muc** 

WHERE msi.organization_id = 101 
AND moqd.inventory_item_id = msi.inventory_item_id 
AND moqd.organization_id = msi.organization_id 
**AND muc.inventory_item_id (+) = msi.inventory_item_id** 
AND mln.inventory_item_id = msi.inventory_item_id 
AND mln.organization_id = msi.organization_id 
AND mln.lot_number = moqd.lot_number 
AND mln.expiration_date <= SYSDATE+365 
AND mil.organization_id(+) = moqd.organization_id 
AND mil.inventory_location_id(+) = moqd.locator_id 

GROUP BY msi.inventory_item_id 
,msi.segment1 
,mln.expiration_date 
,mln.lot_number 
,moqd.subinventory_code 
,mil.segment1 
,msi.primary_uom_code 
**,muc.conversion_rate** 
,msi.FULL_LEAD_TIME 

ORDER BY msi.segment1 
,mln.expiration_date 
,mln.lot_number) exp 
+0

mtl_uom_conversions에 중복 inventory_item_id가 포함되지 않도록 보장합니까? –

+0

나는 이것이 보장된다고 생각하지 않습니다. 나는 IT에 있지 않아 확신 할 수 없다. – ERKSMTY

+0

그들은 'conversion_rate'값이더라도 정확한 복제본입니까? 그렇지 않다면 어느 것을 지키고 싶습니까? (또한 오라클의 기존 구문 대신 현대의 외부 조인 구문을 사용하는 것이 좋습니다. 선택 목록의 하위 쿼리도 이상하게 보입니다. 다른 조인이 될 수는 없습니까?). –

답변

1

: 13 개 항목의

,이 특정 inventory_item_id에 대해 하나 개 이상의 conversion_rate 값은, 그입니다 mtl_uom_conversions으로 쿼리를 확장하면 이러한 추가 행이 왜 빛을 발하는 지 알 수 있습니다. 당신도 할 수

당신이 그들 모두를하지 않으려면 ...

(1) 이러한 중복을 제거; 나를 위해 그 것 때문에이 확인 생각과 DB의 데이터가이 경우 중복/일관성이 있다면

(2) GROUP BY 절에서 muc.conversion_rate를 제거하고 (내부) SELECT 절에 min(muc.conversion_rate)을 추가; 당신은 또한 MAX를 사용할 수 있습니다. 그러나 값은 더 많지만 하나만 원한다면 어느 것을 결정해야합니다 :-)

+0

스티븐 감사합니다. – ERKSMTY

+0

답변을 upvote하려고했지만 낮은 평판 때문에 잠겨 있습니다. 내가 너 한테 금메달을 줄 수 있기를 바란다. – ERKSMTY

+0

아마도 답을 수락 할 수 있습니다. 사실 나는 어떻게 :-) 모르겠다. –