2016-12-20 34 views
1

原始查詢返回259行。修改後,查詢返回271行。這十二行是重複的。我怎樣才能避免這種情況?謝謝你的幫助!!查詢修改後重複的行

查詢(修改粗體):

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'值?如果不是,你想保留哪個? (另外,你應該考慮使用現代的外連接語法,而不是Oracle的舊語法。選擇列表中的子查詢看起來很奇怪,不能是另一個連接嗎?)。 –

回答

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您的答案,但由於低信譽我被鎖定。希望我能給你一個金幣一個reddit。 – ERKSMTY

+0

也許你可以接受答案;其實我不知道如何:-) –