我有一个订单表,其中我将客户在其订单中放置的所有商品插入单行中。如
Table_ORDER
(Od_id
是主键自动递增)
Od_Id Cust_Name Quantity of 101(int) Quantity of 102 Quantity of 103
----- ------- -------------------- --------------- --------------
1 John 5 4 7
2 Kim 4 3 2
另一张价格表就像
Table_ Price
Prod_ID Price (money)
------- ------
101 5.2
102 2.5
103 3.5
现在我想获得客户下的特定订单总额。问题是,如果我为不同的项目使用不同的行,那么订单ID将被更改,如果我使用单行,那么我如何计算总价格,因为我可以将jst单个Prod_ID列。
请指导我并发送一些解决方案
此致
答案 0 :(得分:1)
我确实看到表设计违反了大多数设计值,从表之间没有外键开始。
但问题的最坏情况解决方案是:
select ( q101*price101.price+q102*price102.price) as 'Total Price' from
(select p.id, q101, price from `order`, price p where p.id=101) as price101,
(select p.id, q102, price from `order`, price p where p.id=102) as price102,
(select p.id, q103, price from `order`, price p where p.id=103) as price103
我只是想构建表来连接两个表,然后根据它进行查询。
但随着产品数量的增长,它变得乏味。我真的建议考虑设计方案。
注意:我选择了如下列名:数量101 = q101
答案 1 :(得分:0)
“问题是,如果我为不同的项目使用不同的行,那么订单ID将被更改”。如果通过外键将订购的产品和数量移动到与主订单表相关的单独表格来更改数据库的设计,则可以轻松修复此问题。
这是一个非常简单的例子:
三个表,定义如下:
Table Orders ------------ OrderID (Identity column) CustomerName Table OrderDetails ------------------ OrderID (this is the foreign key from the table Order) ProductID (this is the foreign key from the Products table) Quantity Table Products -------------- ProductID Price
现在,您可以通过执行以下查询来获取给定订单的总数:
SELECT SUM(ISNULL(od.Quantity, 0) * p.Price)
FROM Orders o
JOIN OrderDetail od
ON o.OrderID = od.OrderID
JOIN Products p
ON od.ProductID = p.ProductID
WHERE OrderID = 1
对于客户1(约翰),结果为60.50。对于客户2(Kim),结果为35.30(基于您问题中的数据)。
此设计的好处是,您可以将产品添加到Products表中,而无需更改Orders表的架构(列)。
同样,这只是一个非常简单的例子来说明这个概念。