2013-04-20 51 views
1

我有一个顺序表,其中我插入所有我的客户摆在他的命令在单个row.like项目的总金额不同的项目中单列获得该订单

Table_ORDEROd_id是主键汽车incrementd)

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

重构数据库设计会不会更简单 - 例如,具有自动递增ID的订单表,并且具有与您的订单表具有一对多关系的行项目表(即订单ID您的订单表格可能会在订单项表格中出现多次)。如果您在路上添加产品,查询起来会更容易,并且还可以节省您的麻烦。 – Tim 2013-04-20 08:07:56

回答

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

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(金),结果是35.30(根据您的问题中的数据)。

此设计的优点是允许您将产品添加到产品表中,而无需更改订单表的架构(列)。

再一次,这是一个非常简单的例子来说明这个概念。

+0

Thanxx添正确的指导:) – 2013-04-21 03:46:29