Это требует отношения между клиентами и продуктами, реализуемого соединительной таблицей, содержащей определенную цену для клиента.Предполагая, что у вас есть Таблица Customer
с CustomerID
в качестве первичного ключа и таблица Product
с ProductID
в качестве первичного ключа, новая таблица выглядит следующим образом:
Table CustomerPrice
-------------------
CustomerID Number/Long, no default value, required
ProductID Number/Long, no default value, required
Price Number/Decimal, Scale 2, no default value, required
Основнойключ должен быть составным (CustomerID
, ProductID
).Это гарантирует, что может быть только одна специфическая цена для каждого продукта.
Добавьте отношения между Customer.CustomerID
и CustomerPrice.CustomerID
с каскадом удаления и между Product.ProductID
и CustomerPrice.ProductID
с каскадом удаления.(Вы можете сделать все это в пользовательском интерфейсе.)
Цена по умолчанию будет храниться непосредственно в таблице Product
.
Вы можете выбрать такую цену товара, как эта
SELECT x.CustomerID, x.CustomerName, x.ProductID, x.ProductName, Nz(cp.Price, x.Price) AS Price
FROM
(SELECT c.CustomerID, c.Name AS CustomerName, p.ProductID, p.Name AS ProductName, p.Price
FROM Customer c, Product p) x
LEFT JOIN CustomerPrice AS cp ON x.ProductID = cp.ProductID AND x.CustomerID = cp.CustomerID;
Это дает конкретную цену для клиента, когда она доступна, и цену продукта по умолчанию, в противном случае.
Если вам нужны данные для конкретного клиента или продукта, добавьте предложение WHERE во вложенный SELECT
SELECT x.CustomerID, x.CustomerName, x.ProductID, x.ProductName, Nz(cp.Price, x.Price) AS Price
FROM
(SELECT c.CustomerID, c.Name AS CustomerName, p.ProductID, p.Name AS ProductName, p.Price
FROM Customer c, Product p
WHERE c.CustomerID = 7 AND p.ProductID = 10) x
LEFT JOIN CustomerPrice AS cp ON x.ProductID = cp.ProductID AND x.CustomerID = cp.CustomerID;