【发布时间】:2017-01-06 20:16:03
【问题描述】:
我正在尝试使用我的 SQL 跟踪材料的使用情况。我们的数据库中没有办法将零件用于其原始订单时的链接。一个零件在订单到达后简单地结束在一个箱子里,然后零件的使用基本上只是创建一个交易时使用的零件数量的记录。我正在尝试通过对数据求和并按顺序将其分配给订单号,将使用情况与订单号联系起来。 我的子查询让我走到了这一步。每个订单号都会在某个日期收到。然后,我根据需要等于或大于订单的 RECEIVEDATE 的 USEDATE 加入使用表记录。这样产生的数据是这样的:
| ORDERNUM | PARTNUM | RECEIVEDATE | ORDERQTY | USEQTY | USEDATE |
|----------|----------|-------------------------|-----------|---------|------------------------|
| 4412 | E1125 | 10/26/2016 1:32:25 PM | 1 | 1 | 11/18/2016 1:40:55 PM |
| 4412 | E1125 | 10/26/2016 1:32:25 PM | 1 | 3 | 12/26/2016 2:19:32 PM |
| 4412 | E1125 | 10/26/2016 1:32:25 PM | 1 | 1 | 1/3/2017 8:31:21 AM |
| 4111 | E1125 | 10/28/2016 2:54:13 PM | 1 | 1 | 11/18/2016 1:40:55 PM |
| 4111 | E1125 | 10/28/2016 2:54:13 PM | 1 | 3 | 12/26/2016 2:19:32 PM |
| 4111 | E1125 | 10/28/2016 2:54:13 PM | 1 | 1 | 1/3/2017 8:31:21 AM |
| 0393 | E1125 | 12/22/2016 11:52:04 AM | 3 | 3 | 12/26/2016 2:19:32 PM |
| 0393 | E1125 | 12/22/2016 11:52:04 AM | 3 | 1 | 1/3/2017 8:31:21 AM |
| 7812 | E1125 | 12/27/2016 10:56:01 AM | 1 | 1 | 1/3/2017 8:31:21 AM |
| 1191 | E1125 | 1/5/2017 1:12:01 PM | 2 | 0 | null |
上述部分的查询如下所示:
SELECT
B.*,
NVL(B2.QTY, ‘0’) USEQTY
B2.USEDATE USEDATE
FROM <<Sub Query B>>
LEFT JOIN USETABLE B2 ON B.PARTNUM = B2.PARTNUM AND B2.USEDATE >= B.RECEIVEDATE
我的最终目标是按顺序加入 USEQTY 记录,直到它们填满足够的 ORDERQTY。我还需要添加一个 ORDERUSE 列,该列表示 USEQTY 列中实际应用于该记录的 QTY。不太确定如何更好地表达这一点,所以这里是基于上表我需要发生的事情的示例:
| ORDERNUM | PARTNUM | RECEIVEDATE | ORDERQTY | USEQTY | USEDATE | ORDERUSE |
|----------|----------|-------------------------|-----------|---------|------------------------|-----------|
| 4412 | E1125 | 10/26/2016 1:32:25 PM | 1 | 1 | 11/18/2016 1:40:55 PM | 1 |
| 4111 | E1125 | 10/28/2016 2:54:13 PM | 1 | 3 | 12/26/2016 2:19:32 PM | 1 |
| 0393 | E1125 | 12/22/2016 11:52:04 AM | 3 | 2 | 12/26/2016 2:19:32 PM | 2 |
| 0393 | E1125 | 12/22/2016 11:52:04 AM | 3 | 1 | 1/3/2017 8:31:21 AM | 1 |
| 7812 | E1125 | 12/27/2016 10:56:01 AM | 1 | 0 | null | 0 |
| 1191 | E1125 | 1/5/2017 1:12:01 PM | 2 | 0 | null | 0 |
如果我可以通过查询获取上述信息,那么我就可以将记录组合在一起并对 ORDERUSE 列求和,这将为我提供我需要知道哪些订单已使用和哪些未使用的信息被充分利用。因此,在上面的示例中,如果我对每个 ORDERNUM 的 ORDERUSE 列求和,则订单 4412、4111、0393 都将显示全部使用情况。订单 7812、1191 将显示未完全使用。
【问题讨论】: