首先,希望我的英语不是太糟糕..
我遇到了一个无法解决的问题。 问题是我正在考虑订单处理系统.. 到目前为止我所拥有的是一张表格,其中每篇文章都注册属于这样的订单
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 ..
非常感谢任何帮助..
答案 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