根据条件

时间:2017-12-04 05:23:14

标签: sqlite sql-update

我在我的SQLite数据库中添加了一个列,我需要插入重复的序列号,从1开始... n但它基于其他列的分组。当有新的分组时,序列需要再次从1开始。

这是我的表格: CREATE TABLE "ProdRunResults" ("ID" INTEGER PRIMARY KEY NOT NULL UNIQUE , "SeqNumbr" INTEGER, "Shift" INTEGER, "ShiftSeqNumbr" INTEGER, "Date" DATETIME, "ProdRunID" INTEGER, "Result" VARCHAR)

enter image description here

ShiftSeqNumbr是我需要填充序列号的新列,基于ProdRunID列中的数字分组,然后是Shift列中的数字。

最多可能有3个班次" (工作时间为24小时)。

我拼凑了一些代码来执行此操作,但它以反向(降序)顺序将序列号添加到ShiftSeqNumbr列:

UPDATE ProdRunResults 
SET ShiftSeqNumbr = (SELECT COUNT (*)
FROM ProdRunResults AS N
WHERE N.ProdRunID = ProdRunResults.ProdRunID
    AND N.Shift = ProdRunResults.Shift
    AND N.ShiftSeqNumbr = ProdRunResults.ShiftSeqNumbr);

enter image description here

如何更改Update语句,以便序列号从1开始向上?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您的UPDATE语句计算在ProdRunID / Shift / ShiftSeqNumbr列中与当前行具有相同值的行数。当前行在ShiftSeqNumbr中始终具有空值,因此它计算当前组中尚未更新的行数。

您需要计算当前行之前的行数,即有多少行具有相同的ProdRunIDShift值,以及相同或更小的SeqNumbr值:

UPDATE ProdRunResults 
SET ShiftSeqNumbr = (SELECT COUNT (*)
                     FROM ProdRunResults AS N
                     WHERE N.ProdRunID =  ProdRunResults.ProdRunID
                       AND N.Shift     =  ProdRunResults.Shift
                       AND N.SeqNumbr  <= ProdRunResults.SeqNumbr);