【发布时间】:2018-08-29 20:32:53
【问题描述】:
我正在编写一个查询来获取基于在名为ITM_VNDR_PRIORITY 的列中具有最小值的VENDOR_ID 的项目的数据。 ITM_VNDR_PRIORITY 来自另一个共享密钥 VENDOR_ID 的表。
我用来获取供应商与商品关联的查询:
SELECT *
FROM PS_ITM_VENDOR
WHERE INV_ITEM_ID = '1003'
结果:
SETID INV_ITEM_ID VENDOR_SETID VENDOR_ID ITMV_PRIORITY_LOC ITM_ID_VNDR ITM_VNDR_PRIORITY
SHARE 1003 SHARE 84764A 000001 CFG246 3
SHARE 1003 SHARE CAMLAB 000001 CAT895 4
SHARE 1003 SHARE GYRENT 000001 TDOC-7FS 2
SHARE 1003 SHARE RLMED 000001 CAT895 1
我想为此项目 ID 选择具有最低 ITM_VNDR_PRIORITY 的供应商(在此示例中为 1,即 VENDOR_ID “RLMED”),并且仅将该供应商的行返回到我当前返回所有供应商的下方的此查询中与项目相关联:
SELECT *
FROM PS_ITM_VNDR_UOM UPDEV
WHERE INV_ITEM_ID = '1003'
结果:
SETID INV_ITEM_ID VENDOR_SETID VENDOR_ID VNDR_LOC
--------------------------------------------------------
SHARE 1003 SHARE GYRENT 000001
SHARE 1003 SHARE RLMED 000001
SHARE 1003 SHARE 84764A 000001
SHARE 1003 SHARE CAMLAB 000001
SHARE 1003 SHARE GYRENT 000001
SHARE 1003 SHARE RLMED 000001
我希望此查询根据具有最低 (MIN) 优先级的供应商仅返回与供应商“RLMED”关联的项目。这是我目前所写的,因为我不确定如何仅获取与该项目关联的最小 ITM_VNDR_PRIORITY 的供应商 ID。
SELECT *
FROM PS_ITM_VNDR_UOM UPDEV
LEFT OUTER JOIN PS_ITM_VENDOR UPDEC ON UPDEV.SETID = UPDEC.SETID
AND UPDEV.INV_ITEM_ID = UPDEC.INV_ITEM_ID
AND UPDEV.VENDOR_SETID = UPDEC.VENDOR_SETID
AND UPDEV.VENDOR_ID = UPDEC.VENDOR_ID
WHERE UPDEV.INV_ITEM_ID = '1003'
在本例中,期望的结果如下(返回具有最低 (MIN) 优先级的供应商“RLMED”):
SETID INV_ITEM_ID VENDOR_SETID VENDOR_ID VNDR_LOC
--------------------------------------------------------
SHARE 1003 SHARE RLMED 000001
SHARE 1003 SHARE RLMED 000001
编辑:
我尝试使用此查询,但它仍然返回所有供应商,而不是最低优先级的供应商
SELECT *
FROM PS_ITM_VNDR_UOM UPDEV
LEFT OUTER JOIN PS_ITM_VENDOR UPDEC ON UPDEV.SETID = UPDEC.SETID
AND UPDEV.INV_ITEM_ID = UPDEC.INV_ITEM_ID AND UPDEV.VENDOR_SETID = UPDEC.VENDOR_SETID AND UPDEV.VENDOR_ID = UPDEC.VENDOR_ID
WHERE UPDEV.INV_ITEM_ID = '1003'
AND EXISTS (SELECT MIN(ITM_VNDR_PRIORITY)
FROM PS_ITM_VENDOR UPDEC
WHERE UPDEC.INV_ITEM_ID = UPDEV.INV_ITEM_ID
AND UPDEC.VENDOR_ID = UPDEC.VENDOR_ID)
【问题讨论】:
-
任何其他建议表示赞赏!
标签: sql sql-server-2014