Я ищу запрос, чтобы вернуть столбец в таблице продаж, называемый 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 ошибочно приняты, когда не в списке покупок для того же пункта
Заранее спасибо.
Использование 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 |
+-----+----+-----+-----+-------+
Вы можете использовать предложение 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
для выполнения того же самого действия.
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