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

时间:2013-04-20 07:46:33

标签: sql-server-2008

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

Table_ORDEROd_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列。

请指导我并发送一些解决方案

此致

2 个答案:

答案 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表的架构(列)。

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