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

Sql server 2008 单行中的不同项目以获取该订单的总金额,sql-server-2008,Sql Server 2008,我有一个订单表,在该表中,我将客户在其订单中放置的所有项目插入一行。如 Table\u ORDER(Od\u id是主键自动递增d) 另一张价格表是这样的 Table_ Price Prod_ID Price (money) ------- ------ 101 5.2 102 2.5 103 3.5 现在我想得到客户下的具体订单的总金额。问题是,如果我对不同的项目使用不同的行,订单id将被更改,如果我使用

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

Table\u ORDER
Od\u id
是主键自动递增d)


另一张价格表是这样的

Table_ Price 

Prod_ID      Price (money)
-------      ------
101           5.2
102           2.5
103           3.5

现在我想得到客户下的具体订单的总金额。问题是,如果我对不同的项目使用不同的行,订单id将被更改,如果我使用单行,那么我如何计算总价,因为我可以将jst单个产品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

我确实看到表设计违反了大多数设计值,表之间没有外键

但最糟糕的解决方案是:

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将被更改”。如果通过使用外键将订购的产品和数量移动到与主订单表相关的单独表中来更改数据库的设计,则很容易解决此问题

下面是一个非常简单的示例:

三个表,定义如下:

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 对于客户1(John),结果是60.50。对于客户2(Kim),结果为35.30(基于您问题中的数据)

这种设计的好处是允许您将产品添加到products表中,而无需更改Orders表的架构(列)

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

问题是,如果我对不同的项目使用不同的行,那么订单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 对于客户1(John),结果是60.50。对于客户2(Kim),结果为35.30(基于您问题中的数据)

这种设计的好处是允许您将产品添加到products表中,而无需更改Orders表的架构(列)


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

重构数据库设计不是更简单吗?例如,拥有一个具有自动递增id的订单表,以及一个与订单表具有1-Many关系的行项目表(即,订单表中的订单id可以在行项目表中多次出现)。如果您在以后添加产品,将更容易查询,也可以省去您的麻烦。重构数据库设计不是更简单吗?例如,拥有一个id自动递增的订单表,以及一个与订单表具有1-Many关系的行项目表(也就是说,订单表中的订单id可以在行项目表中多次出现)。如果您继续添加产品,将更容易查询,也可以省去您的麻烦。