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)
我已经尝试过交叉连接,但这也不是解决方案...我无法找出解决方案,你能帮我吗?
似乎您需要先连接值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