根据条件顺序更新字段

时间:2016-07-15 06:44:01

标签: sqlite

我有这个当前的示例数据集

 NEW_ID Name    OLD_ID  New_Name
    123 Hello   XYZ 
    124 How     XYZ 
    125 Are     XYZ 
    126 My      ABC 
    127 Name    ABC 
    128 Is      ABC 
    129 Alex    ABC 

我的目标是将Name字段修改为新的命名约定,以存储在New_Name中,即Hello_Part_1,How_Part_2,Are_Part_3,其中所有这些记录共享一个OLD_ID - 在本例中为XYZ。同样,使用My_Part_1,Name_Part_2,Is_Part_3,Alex_Part_4等ID,其ID等于ABC。

我使用SQL Lite导入.CSV文件。

命名约定如下 - NAME_PART_X,其中X增加该组'组内的记录数量。 OLD_IDs。

1 个答案:

答案 0 :(得分:1)

SQL无法按顺序工作;你必须为每一行独立表达操作。

您想要的数字是具有相同旧ID的行数,该ID也具有与当前行的新ID相同或更小的新ID。 这可以使用correlated subquery

计算
UPDATE MyTable
SET New_Name = Name || '_Part_' ||
               (SELECT COUNT(*)
                FROM MyTable AS T2
                WHERE T2.OLD_ID  = MyTable.OLD_ID
                  AND T2.NEW_ID <= MyTable.NEW_ID);