我有一个订单表,其中我将客户在其订单中放置的所有商品插入到单行中,如
Table_ORDER
(Od_id
是主键auto incred)
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将被更改,如果我使用单行,那么我如何计算总价,因为我可以只放置单个Prod_ID列。
请指导我并发送一些解决方案
对
我确实看到这个表的设计违背了大多数表之间没有外键的设计值。
但是你的问题最坏的解决方案在这里:
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
我只是想建立表来连接你的两个表,然后在此基础上查询。
但是随着产品数量的增长,它变得单调乏味。我真的建议你考虑另一种设计方案。
注意:我选择的列名是这样的:Quantity of 101 = q101
"问题是,如果我对不同的项目使用不同的行,订单id将被更改"。如果您更改数据库的设计,通过外键将订购的产品和数量移动到与主订单表相关的单独表中,这很容易修复。
下面是一个非常简单的例子:
三个表,定义如下:
<>之前表的订单------------OrderID(标识列)CustomerName表OrderDetails------------------OrderID(这是表Order的外键)ProductID(这是product表中的外键)数量表产品--------------ProductID价格之前现在您可以通过执行如下查询来获得给定订单的总数:
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 (John),结果是60.50。对于客户2 (Kim),结果是35.30(基于您问题中的数据)。
这种设计的好处是允许您将产品添加到products表中,而无需更改Orders表的模式(列)。
同样,这是一个非常简单的例子,只是为了说明这个概念