表格和列名称含糊不清,因为我在医疗保健行业,无法分享具体的细节。如果他们从我的公司购买产品(表1)而不是他们当前的供应商(表2),我将使用此查询来显示客户的节省量。SQL在限制数据的同时比较两个表格
我有2个表像这样的MSQL Server 2008上:
Table 1
ProductID
,Description
,Vendor
,Price
Table 2
ProductID
,Description
,Price
我想选择Table 2
每一行,并从Table 1
匹配的数据。但我只想从Table 1
中以最优惠的价格(供应商之间的最低价格)退还供应商,而不是每个供应商。因此对于Table 2
中的任何ProductID
,应该有来自Table1
的一个匹配,或者如果Table 1
中没有匹配的ProductID
,则应该有NULL值。我加入了ProductID
的表格,并返回了我想要的所有列,但是我无法将其限制为表1中的一个结果。如果我在Table 2
中使用1000行来执行此操作,则应返回1000行。我保持与多个供应商比赛中的一些额外结束。
结果应该是这样的:
T1.ProductID, T1.Description, Vendor, T1.Price, T2.ProductID,
T2.Description, T2.Price, (T2.Price - T1.Price) as 'Amount Saved'
我写的SQL相当简单:
SELECT
T1.ProductID,
T1.Description,
Vendor,
T1.Price,
T2.ProductID,
T2.Description,
T2.Price,
(T2.Price - T1.Price) AS 'Amount Saved'
FROM
Table2 T2 LEFT OUTER JOIN Table1 T1
ON T2.ProductID = T1.ProductID
ORDER BY T2.ProductID
这个答案从D士丹利工作;只需稍作更改即可选择价格最低的每一行。
SELECT
T1.ProductID,
T1.Description,
T1.Vendor,
T1.Price,
T2.ProductID,
T2.Description,
T2.Price,
(T1.Price - T2.Price) as 'Amount Saved'
FROM Table2 T2
LEFT JOIN (
SELECT * FROM (
SELECT ProductID, Description, Vendor, Price,
ROW_NUMBER() OVER (PARTITION BY ProductID ORDER BY Price ASC) AS Row
FROM Table1) as result
WHERE row=1
) AS T1
ON T2.ProductID = T1.ProductID
你可以发布查询吗? –
什么是“最佳价格”是指最低(最低)价格,最高存款等?请粘贴您尝试过的代码 –