来自订单表sql server的多列产品和数量

时间:2017-07-12 11:32:07

标签: sql asp.net sql-server

订购表格,产品及其数量有多列相应, 比如产品的prod1,prod2,prod3,prod4和qty1,qty2,qty3,qty4。 因为对于一个订单,可能有超过1个产品,并且每个产品具有不同的数量,如某些客户可能订购的 两个手机'三星J1' 1件(数量)和' samsung s6' 2件(数量)。

如果我在订单表上查询特定产品,如

select *
from order
where (prod1 like '%j1%' or prod2 like '%j1%' or
       prod3 like '%j1%' or prod4 like '%j1%' )

它会给我列出所有' j1'产品的订单。通过这种方式,我可以计算订单的数量,但我想计算每个订单的数量。

但问题是我不知道我应该如何发现这个' j1'产品是prod1或prod2或prod3或prod4,因为如果我可以检查它的prod2 然后我将计算qty2以及是否' j1'就像prod4然后我会算qty4。

例如,一个订单可能包含' j1'作为prod1或prod2或prod3或prod4。从上面的quanry我们可以检查' j1'产品按此顺序存在,但如何 我们也可以为每个订单计算该数量,因为每个订单的每个订单的数量可能不同。

1 个答案:

答案 0 :(得分:0)

我同意戈登的评论。您的数据模型存在缺陷。如果客户想要订购超过4种不同的产品,会发生什么?理想情况下,您的数据表的设置类似于:

CREATE TABLE OrderLines
(
    OrderLinesID int IDENTITY -- Primary key
    , FK_OrderID int NOT NULL -- Foreign key to Order table
    , ProductID int NOT NULL -- Foreign key to Products table
    , Quantity int NOT NULL 
    , .... -- Any additional fields you want to add
)

这样,您可以使用以下内容生成预期结果:

SELECT
    ProductID
    , COUNT DISTINCT FK_OrderID -- Count orders containing selected product
    , SUM(QUANTITY) -- Amount of selected product sold in this order
FROM
    OrderLines
WHERE 
    ProductID = 1 -- Id for J1, from the Product Table
GROUP BY
    ProductID

(请注意这是伪代码和简约的表格设计。在现实生活中,你可能会有更多细节)