我在SQL Server中有一个表,用于跟踪销售订单的工作状态变化。
首次输入订单时,会自动处于
NEW
状态。
当订单中填充有产品并准备发货时,人工处理人员会将其置于
READY
状态。
我们的运输部门随后会打开一个表格,显示所有处于
READY
状态的订单,并运行选项列表报告。届时,订单将以编程方式置于“已挑选”状态。
现在,问题来了。有时,由于未知的原因,状态会被设置为
PICKED
,而它不应该是由自动化的东西设置的,或者有时是由用户意外设置的。
PICKED
状态只能在 READY
或 PARTIALSHIP
状态之前,不能有其他任何内容。
我需要搜索表格以查找状态更改为
PICKED
且前面没有 READY
或 PARTIALSHIP
的情况。
我似乎不知道如何解决这个问题。
这是我正在处理的数据的示例。
sro_num seq stat_code
-------------------------
SO00053427 1 NEW
SO00053427 2 READY
SO00053427 3 PICKED
SO00053427 4 SHIPPED
SO00053427 5 INVOICED
SO00053441 1 NEW
SO00053441 2 INV HOLD
SO00053441 3 PICKED
SO00053441 4 PARTIALSHP
SO00053441 5 BILLMGRHLD
SO00053441 6 INV HOLD
SO00053441 7 PARTIALSHP
SO00053441 8 PARTIALINV
SO00053441 9 BILLMGRHLD
SO00053441 10 INV HOLD
SO00053441 11 READY
SO00053441 12 PICKED
SO00053441 13 SHIPPED
SO00053441 14 INVOICED
我一直在寻找有关如何处理序列的想法,但我找到的只是处理编号列表的解决方案。不是文字。
任何帮助将不胜感激。
WITH CTE as
(
SELECT *,LAG(stat_code,1) over (partition by sro_num order by seq) as Prev_Stat
FROM Example
)
SELECT * FROM
CTE
WHERE stat_code='PICKED'