如何更改重复ID的列/字段的值

  • 本文关键字:字段 的列 ID 何更改 sql
  • 更新时间 :
  • 英文 :


我有50k的数据集/表,类似于以下操作:

ID  value
100 A1
100 DC
100 DC
100 DC
105 DC
105 C9
105 DC
105 DC
110 A3
110 DC
110 DC
115 DC
115 A4
115 DC
120 C2
120 DC
120 DC

我想创建两种类型的更改值colmn。

  1. 如果任何id都有A1、A2、A3等值,那么我想保留此记录,但想将相同id的其他值更改为D1
  2. 如果任何id都有不同于A1、A2、A3…的值(例如C2、C9..(,那么我想保留这个记录,但也想将其他值更改为C9(因为其中一个id有C9和相同的逻辑(

我想更改我的日期集/表,最后看起来如下。

ID  value
100 A1
100 D1
100 D1
100 D1
105 C9
105 C9
105 C9
105 C9
110 A3
110 D1
110 D1
115 D1
115 A4
115 D1
120 C2
120 C2
120 C2

任何提示都将不胜感激。

使用子查询,我们可以获得一个新的值作为

SELECT *
FROM (
SELECT id, value,
/* If first character is other than A then new value will be D1 */
CASE
WHEN LEFT(value,1) != 'A'
THEN 'D1'
ELSE value
END as new_value
FROM tbl
/* Get all rows whose ID is same as A's */
WHERE id IN (
/* Get IDs of rows where value starts with A */
SELECT id
FROM tbl
WHERE value LIKE 'A%'
)
UNION ALL
SELECT id, value,
/* If first value is not C, then query to get value for C as new value */
CASE
WHEN LEFT(value,1) != 'C'
THEN (SELECT value FROM tbl WHERE id = z.id AND value LIKE 'C%')
ELSE value
END AS new_value
FROM tbl AS z
/* Get all rows whose ID is same as C's */
WHERE id IN (
SELECT id
FROM tbl
/* Get all rows starting with C and excluding A's */
WHERE id NOT IN (
/* Get IDs of rows where value starts with A */
SELECT id
FROM tbl
WHERE value LIKE 'A%'
)
AND value LIKE 'C%'
)
) AS o
ORDER BY o.id ASC;

查询有两个主要部分,它们使用UNION ALL进行合并。第一部分解决问题1,第二部分解决问题2。您还可以分别运行两个查询来解决问题。

工作Fiddle

最新更新