Названия таблиц и столбцов являются неопределенными, потому что я в отрасли здравоохранения и не могу поделиться конкретными данными. Я использую этот запрос, чтобы показать сумму сбережений для клиента, если они покупают продукт у моей компании (таблица 1) вместо своего текущего поставщика (таблица 2).SQL Сравнение двух таблиц при ограничении данных
У меня есть 2 таблицы, как это на Msql Server 2008:
Table 1
ProductID
, Description
, Vendor
, Price
Table 2
ProductID
, Description
, Price
Я хочу, чтобы выбрать все строки из Table 2
и сопоставления данных из Table 1
. Но я хочу только вернуть продавца с лучшей ценой (самая низкая цена среди поставщиков) от Table 1
, а не у каждого поставщика. Поэтому для любого ProductID
в Table 2
должно быть одно совпадение из Table1
или значение NULL, если нет ProductID
в Table 1
. Я присоединился к таблицам на ProductID
и возвратил все нужные мне столбцы, но я не могу заставить его ограничивать только один результат из таблицы 1. Если я делаю это с 1000 строк в Table 2
, я должен вернуть 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
Этот ответ от Д. Стэнли работал; с незначительным изменением, чтобы выбрать каждую строку с самой низкой ценой.
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
Можете ли вы разместить запрос? –
Что такое «лучшая цена», вы имеете в виду самую низкую (минимальную) цену, максимально сохраненную и т. Д.? вставьте код, который вы попробовали –