我在向 SQLite 表中的重复条目添加后缀时遇到问题。这是场景: 我有这张桌子...
id created_at updated_at scene_id
-- ---------- ---------- ---------
1 2024-02-13 2024-03-05 VT-1105
2 2024-02-14 2024-03-06 KA-338
3 2024-02-15 2024-03-07 JU-182
4 2024-02-16 2024-03-08 PX-118
5 2024-02-17 2024-03-09 PO-6339085
6 2024-02-18 2024-03-10 LA-426
7 2024-03-03 2024-03-06 KA-338
8 2024-03-03 2024-03-06 KA-338
9 2024-03-03 2024-03-06 KA-338
10 2024-03-04 2024-03-07 JU-182
11 2024-03-04 2024-03-07 JU-182
12 2024-03-04 2024-03-07 JU-182
13 2024-03-04 2024-03-07 JU-182
14 2024-03-05 2024-03-07 PX-118
15 2024-03-05 2024-03-07 PX-118
...我想在 SQLite 的底行上附加重复的场景名称,并带有 A、B、C 等,如下所示:
id created_at updated_at scene_id
-- ---------- ---------- ---------
1 2024-02-13 2024-03-05 VT-1105
2 2024-02-14 2024-03-06 KA-338
3 2024-02-15 2024-03-07 JU-182
4 2024-02-16 2024-03-08 PX-118
5 2024-02-17 2024-03-09 PO-6339085
6 2024-02-18 2024-03-10 LA-426
7 2024-03-03 2024-03-06 KA-338-A
8 2024-03-03 2024-03-06 KA-338-B
9 2024-03-03 2024-03-06 KA-338-C
10 2024-03-04 2024-03-07 JU-182-A
11 2024-03-04 2024-03-07 JU-182-B
12 2024-03-04 2024-03-07 JU-182-C
13 2024-03-04 2024-03-07 JU-182-D
14 2024-03-05 2024-03-07 PX-118-A
15 2024-03-05 2024-03-07 PX-118-B
在尝试使用新名称创建新列时,我中途失败了:
SELECT *,
NULLIF( ROW_NUMBER() OVER (PARTITION BY s.scene_id)-1 , 0 ) AS file_no,
s.scene_id || '-' || CHAR(64 + ROW_NUMBER() OVER (PARTITION BY s.scene_id )-1) AS new_scene_id
FROM scenes s
ORDER BY s.id ASC
id created_at updated_at scene_id file_no new_scene_id
-- ---------- ---------- -------- ------- ------------
1 2024-02-13 2024-03-05 VT-1105 null VT-1105-@
2 2024-02-14 2024-03-06 KA-338 null KA-338-@
3 2024-02-15 2024-03-07 JU-182 null JU-182-@
4 2024-02-16 2024-03-08 PX-118 null PX-118-@
5 2024-02-17 2024-03-09 PO-6339085 null PO-6339085-@
6 2024-02-18 2024-03-10 LA-426 null LA-426-@
7 2024-03-03 2024-03-06 KA-338 1 KA-338-A
8 2024-03-03 2024-03-06 KA-338 2 KA-338-B
9 2024-03-03 2024-03-06 KA-338 3 KA-338-C
10 2024-03-04 2024-03-07 JU-182 1 JU-182-A
11 2024-03-04 2024-03-07 JU-182 2 JU-182-B
12 2024-03-04 2024-03-07 JU-182 3 JU-182-C
13 2024-03-04 2024-03-07 JU-182 4 JU-182-D
14 2024-03-05 2024-03-07 PX-118 1 PX-118-A
15 2024-03-05 2024-03-07 PX-118 2 PX-118-B
我不知道如何保持前 6 行的名称不变。我尝试在 dbfiddle.uk 上组合 CHAR() 和 NULLIF(),但如果我尝试运行 CHAR(null),它根本不会运行。
使用 CASE 语句来决定何时添加后缀
SELECT *,
ROW_NUMBER() OVER (PARTITION BY s.scene_id)-1 AS file_no,
CASE ROW_NUMBER() OVER (PARTITION BY s.scene_id )
WHEN 1 THEN s.scene_id
ELSE s.scene_id || '-' || CHAR(64 + ROW_NUMBER() OVER (PARTITION BY s.scene_id )-1)
END as new_scene_id
FROM [scenes] s
ORDER BY s.id ;
id | 创建于 | 更新于 | 场景_id | 文件号 | 新场景_id |
---|---|---|---|---|---|
1 | 2024-02-13 | 2024-03-05 | VT-1105 | 0 | VT-1105 |
2 | 2024-02-14 | 2024-03-06 | KA-338 | 0 | KA-338 |
3 | 2024-02-15 | 2024-03-07 | JU-182 | 0 | JU-182 |
4 | 2024-02-16 | 2024-03-08 | PX-118 | 0 | PX-118 |
5 | 2024-02-17 | 2024-03-09 | PO-6339085 | 0 | PO-6339085 |
6 | 2024-02-18 | 2024-03-10 | LA-426 | 0 | LA-426 |
7 | 2024-03-03 | 2024-03-06 | KA-338 | 1 | KA-338-A |
8 | 2024-03-03 | 2024-03-06 | KA-338 | 2 | KA-338-B |
9 | 2024-03-03 | 2024-03-06 | KA-338 | 3 | KA-338-C |
10 | 2024-03-04 | 2024-03-07 | JU-182 | 1 | JU-182-A |
11 | 2024-03-04 | 2024-03-07 | JU-182 | 2 | JU-182-B |
12 | 2024-03-04 | 2024-03-07 | JU-182 | 3 | JU-182-C |
13 | 2024-03-04 | 2024-03-07 | JU-182 | 4 | JU-182-D |
14 | 2024-03-05 | 2024-03-07 | PX-118 | 1 | PX-118-A |
15 | 2024-03-05 | 2024-03-07 | PX-118 | 2 | PX-118-B |