sql - 使用逗号分隔符拆分列

标签 sql sql-server tsql split

我有一个包含 3 列的表格,其中包含下面给出的数据。

ID |  Col1        |         Col2            |   Status
1     8007590006    8002240001,8002170828        I
2     8002170828    8002000004                   I
3     8002000001    8002240001                   I
4     8769879809    8002000001                   I
5     8769879809    8002000001                   I

Col2 可以包含多个逗号分隔值。如果 col2 中的值也存在于 col1 中,我需要将状态更新为 C。

例如,对于 ID = 1col2 包含 8002170828,它出现在 Col1 中,ID = 2。所以,status = 'C'

根据我的尝试,我知道它在有多个值的情况下不起作用,因为我需要拆分该数据并获取各个值,然后应用更新。

UPDATE Table1
SET STATUS = 'C' 
WHERE Col1 IN (SELECT Col2 FROM Table1)

最佳答案

如果您使用的是 SQL Server 2016 或更高版本,则 STRING_SPLIT派上用场:

WITH cte AS (
    SELECT ID, Col1, value AS Col2
    FROM Table1
    CROSS APPLY STRING_SPLIT(Col2, ',')
)

UPDATE t1
SET Status = 'C'
FROM Table1 t1
INNER JOIN cte t2
    ON t1.Col1 = t2.Col2;

enter image description here

Demo

关于sql - 使用逗号分隔符拆分列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56897054/

相关文章:

sql - 如何使用 sequelize 在 updateAt 上应用 date_format?

c# - 在 Sql Server 2008 中获取 Guid.getHashCode() 的等效值

tsql - 内连接计数和分组依据

sql - 将分隔字符串分解为临时表

mysql - #1503 - UNIQUE INDEX 必须包含表分区函数中的所有列

sql-server - 在 SQL Server 2008 R2 上创建触发器以捕获记录更新

sql-server - 使用 AlwaysOn 集群进行加密

mysql - SQL 加入 SQLzoo

mysql - 保存查询结果以在 IN 比较中使用

php - 插入mysql查询时得到一个空的div