如何从一个表中列出帖子,同时从另一个表中总计一个金额?

时间:2011-04-19 12:18:39

标签: sql sql-server

首先,希望我的英语不是太糟糕..

我遇到了一个无法解决的问题。 问题是我正在考虑订单处理系统.. 到目前为止我所拥有的是一张表格,其中每篇文章都注册属于这样的订单

Tbl_orderLines id,prod_week,article_id

然后我也有一个och表,其中tbl_orderLines中每行的数量注册如下

Tbl_inventory orderline_id,article_id,金额

现在两个表中的article_id是相同的(双帖)认为这样做会更容易吗? 我想要的是在特定时间获得每篇特定文章的可用数量。 所以我希望能够列出Tbl_orderLInes中的每一行,并且使用连接获取每行的数量,但是!我还想获得特定文章的总金额。因此,我想从Tbl_inventory中总结amount列,其中article_id与tbl_orderLines中的行相同。

这就是我现在所拥有的 Tbl_orderLines

id         prod_week        article_id    
 1           1130              2   
 2           1129              5          
 3           1129              2     
 4           1128              2   

Tbl_inventory

orderLine_id         article_id      amount     
 1                       2               1          
 2                       5               2          
 3                       2               1          
 4                       2               2          

结果应该是

id         prod_week        article_id      amount     TotalAmount
 1           1130              2               1          4
 2           1129              5               2          2
 3           1129              2               1          3
 4           1128              2               2          2

不知道是否可以理解我的问题? 我正在使用MSSQL ..

非常感谢任何帮助..

2 个答案:

答案 0 :(得分:1)

我相信结果集的第一部分是通过以下方式实现的。

SELECT
  [order_line].id,
  [order_line].prod_week,
  [order_line].article_id,
  [inventory].amount
FROM
  Tbl_orderLines             AS [order_line]
INNER JOIN
  Tbl_inventory              AS [inventory]
    ON [inventory].orderline_id = [order_line].id
但是,我并不是100%肯定TotalAmount列。我最好的猜测是你想要...所有前几周的数量总和与article_id相同?

SELECT
  [order_line].id,
  [order_line].prod_week,
  [order_line].article_id,
  [inventory].amount,
  SUM([historic_inventory].amount) AS TotalAmount
FROM
  Tbl_orderLines             AS [order_line]
INNER JOIN
  Tbl_inventory              AS [inventory]
    ON [inventory].orderline_id = [order_line].id
INNER JOIN
  Tbl_orderLines             AS [historic_orders]
    ON [historic_orders].article_id = [order_line].article_id
    AND[historic_orders].prod_week <= [order_line].prod_week
INNER JOIN
  Tbl_inventory              AS [historic_inventory]
    ON [historic_inventory].orderline_id = [historic_order_line].id
GROUP BY
  [order_line].id,
  [order_line].prod_week,
  [order_line].article_id,
  [inventory].amount

答案 1 :(得分:0)

我无法得到你想要的东西,但我相信你可以尝试这样的东西来增强你的目标。

CREATE TABLE [dbo].[inventory](
    [id] [int] NULL,
    [article_id] [int] NULL,
    [amount] [int] NULL
) ON [PRIMARY]

GO

CREATE TABLE [dbo].[orderLines](
    [id] [int] NULL,
    [prod_week] [int] NULL,
    [article_id] [int] NULL
) ON [PRIMARY]

GO

SELECT ol.id, 
       ol.prod_week, 
       ol.article_id, 
       i.amount, 
       SUM(amount) OVER (PARTITION BY i.article_id) AS totalAmount
  FROM dbo.orderLines AS ol, dbo.inventory AS i
 WHERE ol.id = i.id
 ORDER BY ol.id