单行中的不同项目,以获得该订单的总金额



我有一个订单表,其中我将客户在其订单中放置的所有商品插入到单行中,如

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表的模式(列)。

同样,这是一个非常简单的例子,只是为了说明这个概念

最新更新