拆分一列并获取所有计算行

ord*_*nie 0 sql t-sql sql-server

我有一张由以下内容组成的表格:

ID 文本 职位编号 职位ID
1 托托 45 56,58
2 塔塔 45 45.51
3 蒂蒂 46

我想要:

ID 文本 计算的作业ID
1 托托 45
1 托托 56
1 托托 58
2 塔塔 45
2 塔塔 51
3 蒂蒂 46

我尝试过的

我尝试过交叉应用:

SELECT 
   Id, Text, x.value as CalculatedJobId
FROM tbl_data
CROSS APPLY string_split(jobsIds, ',') x
WHERE x.value <> ''
Run Code Online (Sandbox Code Playgroud)

但是 JobsIds 中不包含 jobId 的情况消失了,jobIds 为空的情况也消失了。所以我得到了:

ID 文本 计算的作业ID
1 托托 56
1 托托 58
2 塔塔 45
2 塔塔 51

我尝试交叉应用两次,但这不是正确的语法:

SELECT 
   Id, Text, x.value as CalculatedJobId, y.value
FROM tbl_data
CROSS APPLY string_split(jobsIds, ',') x
CROSS APPLY JobId y
WHERE x.value <> ''
Run Code Online (Sandbox Code Playgroud)

我已经尝试过交叉连接,但这也不是解决方案...我无法找出解决方案,你能帮我吗?

use*_*983 5

似乎您需要先连接值JobId,然后拆分:

SELECT d.Id,
       d.Text,
       SS.value AS CalculatedJobId
FROM dbo.tbl_data d
     CROSS APPLY STRING_SPLIT(CONCAT_WS(',',d.JobID,d.jobsIds), ',') SS;
Run Code Online (Sandbox Code Playgroud)

JobsIds注意:这假设for的值Id 3不是NULL零长度字符串 ( ) 如果是后者,我建议您应该首先存储,但否则您可以使用将其转换为函数中的。''NULLNULLIFNULL