Нужен запрос для сортировки значений из одной таблицы на основе значений другой

0

Я ищу запрос, чтобы вернуть столбец в таблице продаж, называемый MRP. Эта таблица имеет некоторые ошибочные значения MRP. где, как и в таблице " Purchase все в порядке и имеет правильные значения MRP. Необходим запрос для возврата значений в таблице продаж, у которых нет соответствующего MRP в таблице покупок для отдельного товара.

Пример таблицы покупок

  Iid  CP        QUANTITY   MRP PRICE
  1   62.8  240  89 78
  1   57.5  240  89 79
  1  60.15  480  89 79
  2  60.14  720  89 79
  2  60.15  480  89 79

Пример таблицы продаж здесь 2-я строка имеет Mistaken MRP

  iid  CP   QTY MRP PRICE
  1   57.5  240 89  77
  1   57.5  40  81  79
  1   57.5  40  89  79
  1   62.8  40  89  72
  1   62.8  40  89  78

Необходим запрос, чтобы показать идентификатор в таблице продаж, где ItemID iid и MRP ошибочно приняты, когда не в списке покупок для того же пункта

Заранее спасибо.

Теги:
sql-server
join

3 ответа

0

Использование not exists()

select *
from sale s
where not exists (
  select 1
  from purchase p
  where p.iid = s.iid
    and p.mrp = s.mrp
  )

демо-версия рекстера: http://rextester.com/ZICIT13088

возвращает:

+-----+----+-----+-----+-------+
| iid | cp | qty | mrp | price |
+-----+----+-----+-----+-------+
|   1 | 58 |  40 |  81 |    79 |
+-----+----+-----+-----+-------+
0

Вы можете использовать предложение NOT IN для проверки значений, которые не существуют. В вашем случае просто введите значения "NOT IN" из таблицы закупок:

SELECT MRP
FROM SalesTable
WHERE Iid NOT IN (SELECT IId FROM PurchaseTable)

Это вернет поле MRP для всех строк в вашей таблице продаж с значениями "Iid", которые не имеют соответствующего значения "Iid" в PurchaseTable. В зависимости от вашей версии БД вам может потребоваться добавить WHERE Iid IS NOT NULL к вашему подбору для работы с NOT IN.

Вы также должны иметь возможность использовать оператор NOT EXISTS для выполнения того же самого действия.

  • 0
    Ничего не вернуть, извините
  • 0
    Пожалуйста, отправьте точный запрос, который вы запустили.
0
SELECT id, itemn, CAST(MRP AS NUMERIC(18,0)) as mrp, price
FROM [iBillDB].[dbo].DETAILSALE
WHERE  CAST(MRP AS NUMERIC(18,0)) NOT IN (SELECT CAST(MRP AS NUMERIC(18,0)) FROM [iBillDB].[dbo].DETAILPURCHASES) order by id, CAST(itemn AS NUMERIC(18,0)) asc

Это работало для меня. Спасибо за подсказку @ravioli

Ещё вопросы

Сообщество Overcoder
Наверх
Меню