对于SQL Server中的此类数据,应该使用什么循环?
我有一个数据列表,其中包含3列Status、Next Status和Default(0,1)。如何循环遍历数据并获得默认值为1的最后一个状态 这是我的桌子对于SQL Server中的此类数据,应该使用什么循环?,sql,sql-server,loops,Sql,Sql Server,Loops,我有一个数据列表,其中包含3列Status、Next Status和Default(0,1)。如何循环遍历数据并获得默认值为1的最后一个状态 这是我的桌子 ID Status Next Status Default -------------------------------- 1 PASS FAIL 0 2 PASS HOLD 0 3 PASS
ID Status Next Status Default
--------------------------------
1 PASS FAIL 0
2 PASS HOLD 0
3 PASS RELE 1
4 FAIL EXEM 0
5 FAIL HOLD 1
6 HOLD RELE 0
7 RELE HOLD 0
8 RELE CANC 0
Status Next Status Default
--------------------------------
PASS FAIL 0
PASS HOLD 0
PASS RELE 1
FAIL EXEM 0
FAIL HOLD 1
HOLD RELE 0
RELE HOLD 0
RELE CANC 0
例如,我的状态
是通过
,现在它将在表中循环并检查默认值为1的最后一个状态
Samle1:通过-发布-1
由于RELE处于下一个状态,它将查看RELE
RELE CANC 0当下一个默认状态变为0时,它将获得RELE
我有一个数据列表,包含3列状态、下一个状态和
默认值(0,1)。如何循环遍历数据并获取最后的状态
其中Default=1
这是我的桌子
ID Status Next Status Default
--------------------------------
1 PASS FAIL 0
2 PASS HOLD 0
3 PASS RELE 1
4 FAIL EXEM 0
5 FAIL HOLD 1
6 HOLD RELE 0
7 RELE HOLD 0
8 RELE CANC 0
Status Next Status Default
--------------------------------
PASS FAIL 0
PASS HOLD 0
PASS RELE 1
FAIL EXEM 0
FAIL HOLD 1
HOLD RELE 0
RELE HOLD 0
RELE CANC 0
示例我的状态是PASS,现在它将在表中循环并检查
默认值为1的最后一个状态是什么
Samle1:通过-发布-1
由于RELE处于下一个状态,它将查看RELE
RELE CANC 0当下一个默认状态变为0时,它将获得
瑞尔
我不确定我是否正确理解了要求
我的理解是:对于任何给定的状态,您都需要计算其先前的状态(如果有),默认值为1。我知道“status”列值是行中“next status”列的给定值的前一个状态。如果我的这种理解是错误的,请纠正我
根据您对本程序的输入,以下是两个查询:
SELECT DISTINCT
S.Status
,LastStatus = OA.Status
FROM Status S
OUTER APPLY (
SELECT TOP 1 SI.Status
FROM Status SI
WHERE SI.[Next Status] = S.Status
AND SI.Default = 1
) OA
WHERE S.Status = '<input status name>';
是否要获取最新的“下一个状态”值,其中“默认值”=1,“状态”=PASS?此外,表中是否有唯一的行标识符?如果没有,则应该有一个相关数据,并且该数据本身没有顺序。如果要按顺序排序,则需要另一列,即带有时间戳的列。有了它,解决方案就很简单了。是的,重复@R.J.Dunnill所说的——虽然上面的列表是从上到下排序的,但在关系数据库中没有这样的默认排序,即使看起来它们是按照进入的顺序出现的。有时可能是这样,但根据很多情况,例如索引,情况会发生变化。如果您需要一个持久的行id,那么您需要在表中定义它。一旦你这样做了,你就永远不会用一个
循环来做这件事,这是程序性思维。它很可能是一个递归的CTE来回答这个问题。另外,假设它们的编号为1到8,我可以看到您的第一个示例是如何从PASS移动到RELE的,但我不知道您的解释的后半部分是什么意思。