【问题标题】:Split a column and get all the calculated lines拆分一列并获取所有计算的行
【发布时间】:2022-01-17 20:56:59
【问题描述】:

我有一张由 :

组成的表格
Id Text JobId JobsIds
1 toto 45 56,58
2 tata 45 45.51
3 titi 46

我想拥有:

Id Text CalculatedJobId
1 toto 45
1 toto 56
1 toto 58
2 tata 45
2 tata 51
3 titi 46

我的尝试

我尝试过交叉申请:

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

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

Id Text CalculatedJobId
1 toto 56
1 toto 58
2 tata 45
2 tata 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 <> ''

我已经尝试过交叉连接,但这也不是解决方案......我无法弄清楚解决方案,请你帮帮我吗?

【问题讨论】:

  • 联合怎么样?

标签: sql sql-server tsql


【解决方案1】:

看来你需要先将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;

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-31
    • 1970-01-01
    • 2023-03-28
    • 2021-01-16
    • 1970-01-01
    相关资源
    最近更新 更多