此查詢的目的是爲「相同」類型的項目的四種不同變體計算每個唯一ID(LUID_NO)。 它按預期工作。
現在我的問題,這個查詢可以簡化或以另一種方式寫?
當我看到它時,我無法動搖這種感覺,即可能用另一種更簡單的方式來書寫它。可能簡化SQL?
SELECT
(SELECT COUNT(DISTINCT ICL.LUID_NO)
FROM L2000.ITEM_CARRIER IC
INNER JOIN L2000.ITEM_UNITS_DEFINITION IUD ON IUD.PV_ID=IC.PV_ID AND IUD.STORER_ID=IC.STORER_ID AND IUD.ITEM_ID=IC.ITEM_ID
INNER JOIN L2000.ITEM_CARRIER_LUID ICL ON ICL.ITEM_CARRIER_NO=IC.ITEM_CARRIER_NO
INNER JOIN L2000.ITEM_PROPERTY IP ON IC.PROPERTY_INDEX=IP.PROPERTY_INDEX
INNER JOIN L2000.ITEM I ON I.ITEM_ID = IC.ITEM_ID AND I.STORER_ID = IC.STORER_ID
WHERE IC.PV_ID = 'B2'
AND IP.BLOCK_CODE IS NULL
AND IUD.UOM_QTY = ICL.PHYSIC_QTY
AND IUD.UNIT_DEF_ID = 'LU'
AND IC.STORER_ID = 'PG'
AND ICL.PHYSIC_QTY > 0
AND I.ITEM_DESC LIKE '#%'
AND I.ITEM_GROUP_ID IN ('BABYCARE','FEMCARE')
)AS B2_PALLETS,
(SELECT COUNT(DISTINCT ICL.LUID_NO)
FROM L2000.ITEM_CARRIER IC
INNER JOIN L2000.ITEM_UNITS_DEFINITION IUD ON IUD.PV_ID=IC.PV_ID AND IUD.STORER_ID=IC.STORER_ID AND IUD.ITEM_ID=IC.ITEM_ID
INNER JOIN L2000.ITEM_CARRIER_LUID ICL ON ICL.ITEM_CARRIER_NO=IC.ITEM_CARRIER_NO
INNER JOIN L2000.ITEM_PROPERTY IP ON IC.PROPERTY_INDEX=IP.PROPERTY_INDEX
INNER JOIN L2000.ITEM I ON I.ITEM_ID = IC.ITEM_ID AND I.STORER_ID = IC.STORER_ID
WHERE IC.PV_ID = 'B3'
AND IP.BLOCK_CODE IS NULL
AND IUD.UOM_QTY = ICL.PHYSIC_QTY
AND IUD.UNIT_DEF_ID = 'LU'
AND IC.STORER_ID = 'PG'
AND ICL.PHYSIC_QTY > 0
AND I.ITEM_DESC LIKE '#%'
AND I.ITEM_GROUP_ID IN ('BABYCARE','FEMCARE')
)AS B3_PALLETS,
(SELECT COUNT(DISTINCT ICL.LUID_NO)
FROM L2000.ITEM_CARRIER IC
INNER JOIN L2000.ITEM_UNITS_DEFINITION IUD ON IUD.PV_ID=IC.PV_ID AND IUD.STORER_ID=IC.STORER_ID AND IUD.ITEM_ID=IC.ITEM_ID
INNER JOIN L2000.ITEM_CARRIER_LUID ICL ON ICL.ITEM_CARRIER_NO=IC.ITEM_CARRIER_NO
INNER JOIN L2000.ITEM_PROPERTY IP ON IC.PROPERTY_INDEX=IP.PROPERTY_INDEX
INNER JOIN L2000.ITEM I ON I.ITEM_ID = IC.ITEM_ID AND I.STORER_ID = IC.STORER_ID
WHERE IC.PV_ID = 'B2'
AND IP.BLOCK_CODE IS NOT NULL
AND IUD.UNIT_DEF_ID = 'LU'
AND IC.STORER_ID = 'PG'
AND ICL.PHYSIC_QTY > 0
AND I.ITEM_DESC LIKE '#%'
AND I.ITEM_GROUP_ID IN ('BABYCARE','FEMCARE')
)AS BLOCKED_B2_PALLETS,
(SELECT COUNT(DISTINCT ICL.LUID_NO)
FROM L2000.ITEM_CARRIER IC
INNER JOIN L2000.ITEM_UNITS_DEFINITION IUD ON IUD.PV_ID=IC.PV_ID AND IUD.STORER_ID=IC.STORER_ID AND IUD.ITEM_ID=IC.ITEM_ID
INNER JOIN L2000.ITEM_CARRIER_LUID ICL ON ICL.ITEM_CARRIER_NO=IC.ITEM_CARRIER_NO
INNER JOIN L2000.ITEM_PROPERTY IP ON IC.PROPERTY_INDEX=IP.PROPERTY_INDEX
INNER JOIN L2000.ITEM I ON I.ITEM_ID = IC.ITEM_ID AND I.STORER_ID = IC.STORER_ID
WHERE IC.PV_ID = 'B3'
AND IP.BLOCK_CODE IS NOT NULL
AND IUD.UNIT_DEF_ID = 'LU'
AND IC.STORER_ID = 'PG'
AND ICL.PHYSIC_QTY > 0
AND I.ITEM_DESC LIKE '#%'
AND I.ITEM_GROUP_ID IN ('BABYCARE','FEMCARE')
)AS BLOCKED_B3_PALLETS
FROM L2000.ITEM_CARRIER
WHERE ROWNUM = 1
跳過子查詢,做左連接代替。並使用大小寫表達式來進行條件聚合。 – jarlh
您的子查詢與主查詢無關,因此,您可以將'FROM D000'開始,而不是'FROM L2000.ITEM_CARRIER WHERE ROWNUM = 1'。 –
您可以在'ITEM_ID'上加入'ITEM'和'ITEM_CARRIER'和'ITEM_UNITS_DEFINITION'。爲什麼不'ITEM_PROPERTY'呢?那張桌子沒有「ITEM_ID」嗎?如果你展示並解釋表格是如何相關的,這將有所幫助。例如,什麼是「PV_ID」? –