我有两个父子表和几个支持表。我正在努力找出他们之间的正确关系。
Order Id, Supplier, Order Date
等。ProductId and the Quantity Ordered
。每个订单包含一个或多个OrderDetails,其中概述了订购的产品和数量。Tracking Number and Shipper
。通过订单ID链接到订单。订单可能有多个货件。例如,我订购了100个灯泡。他们分五次发货。因此,逻辑是我输入有关产品中订购的产品的详细信息。例如,100个CREE LED灯泡和50个门把手。
当我下订单时,我在订单中创建订单。
i.e. amazon.com, order #45454.
然后我在 OrderDetails 中将子行添加到该顺序。 i.e. 30 CREE LED Lightbulbs.
当订单发货时,我在货件表中创建了一个条目。 i.e. Tracking #46464646464
,与订单中的OrderId相关联。然后我在 ShipmentDetails 中输入该货件中的内容。例如,只有20或30个CREE LED灯泡可能与此运输条目相关联。
我正在努力弄清楚如何将运输明细记录与订单明细表联系起来。让我们说运输明细表有4个字段。
我被前面的#3和#4困住了。我希望我以一种模糊可理解的方式解释了这一点!下面的图片可能会有所帮助!
问:
如何在 ShipmentDetail 表格中创建一个字段,并从 OrderDetail 表的数量字段中提取默认值,其中
Shipments!OrderId = Orders!Id and ShipmentDetail!ProductID = OrderDetails!Product ID
我在MS Access 2016中工作 - 但我怀疑这是一个相当通用的SQL问题...而不是特定于MS Access。
答案 0 :(得分:1)
我认为命名令人困惑。
我宁愿拥有的是(每个第一个ID都是自动增量,忘记了如何在访问时说这个):
// Product doesn't contain any information about quantity/price etc ...
create table Products(product_id int, name text, description text ...);
// Orders:
create table Orders(order_id int, client_name text, description text ...);
create table OrderDetails(order_detail_id int, order_id int, product_id int, quantity double, unit_price double, ...);
// Shipments
create table Shipments(shipment_id int, company text, description text ...);
create table ShipmentDetails(shipment_detail_id int, shipment_id int, product_id int, quantity double, price double default 0, ...);
// inserting shipments per product (defaulting to total quantity per product), assuming we have shipment_id SID
insert into ShipmentDetails(shipment_id, order_id, product_id, quantity)
select SID, order_id, product_id, SUM(quantity)
from OrderDetails
group by order_id, product_id;
然后你当然可以有一些过滤器(日期,客户等......)。
对于第一个问题,我不清楚你想要什么样的回报。
以下是数量的比较:
select t.order_id, t.product_id, sum(t.quantity) as product_quantity, sum(u.quantity) as shipment_quantity
from OrderDetails t inner join ShipmentDetails u
on t.order_id = u.order_id and t.product_id = u.product_id;