在检查第二个逗号分隔的字符串后获取字符串,而不是在第一个逗号分隔的字符串中
get the string after check 2nd comma separated string not in 1st comma separated string
我有一个名为 BTSQMTAsk 的 table,它有两个任务。每个任务都会有一列 CompletedID,是一个逗号分隔的列。我需要 return 不在第二个任务中的任务的 completedID(记住两者都是逗号分隔值)。请帮我找到这个答案。我坚持这个
TaskID TaskName CompletedID
1 Upload Signed SOW 1,2,3,5,4,9
2 Confirm Payment 1,5
在此,我必须比较两个任务的 completedID 并且 return 结果必须像 '2,3,4,9'
-输出
CompletedID
2,3,4,9
尝试规范化您的 table:分成两个 table。它会让生活更轻松。
Table1 (TaskId, TaskName)
Table2 (TaskId, CompletedID)
Table2
TaskId CompletedId
1 1
1 2
1 3
1 5
1 4
1 9
2 1
2 5
然后查询变得非常非常容易:
SELECT CompletedId FROM Table2
WHERE TaskId = 1
AND CompletedId NOT IN
( SELECT CompletedId FROM Table2 WHERE TaskId = 2)
此解决方案不需要您更改架构。
因此,使用这两种解决方案中的任何一种来生成一个函数,该函数将 return 从定界字符串 ToList() from Delimited String 中生成一个列表。然后做类似的事情:
/* test data */
create table dbo.foo ( id integer, idlist varchar(100) )
insert into foo
select 1, '1,2,3,4,5'
union
select 2, '1,5'
/* end test data */
declare @arr varchar(100)
set @arr = ''
select @arr = @arr + a.arrValue + ','
from (
select count(x.arrValue) as cnt,
x.arrValue
from dbo.foo f
cross apply dbo.fnArray(f.idlist, ',') x
group by x.arrValue
having count(x.arrValue) = 1
) a
set @arr = left(@arr, len(@arr) - 1)
print @arr
我有一个名为 BTSQMTAsk 的 table,它有两个任务。每个任务都会有一列 CompletedID,是一个逗号分隔的列。我需要 return 不在第二个任务中的任务的 completedID(记住两者都是逗号分隔值)。请帮我找到这个答案。我坚持这个
TaskID TaskName CompletedID
1 Upload Signed SOW 1,2,3,5,4,9
2 Confirm Payment 1,5
在此,我必须比较两个任务的 completedID 并且 return 结果必须像 '2,3,4,9'
-输出
CompletedID
2,3,4,9
尝试规范化您的 table:分成两个 table。它会让生活更轻松。
Table1 (TaskId, TaskName)
Table2 (TaskId, CompletedID)
Table2
TaskId CompletedId
1 1
1 2
1 3
1 5
1 4
1 9
2 1
2 5
然后查询变得非常非常容易:
SELECT CompletedId FROM Table2
WHERE TaskId = 1
AND CompletedId NOT IN
( SELECT CompletedId FROM Table2 WHERE TaskId = 2)
此解决方案不需要您更改架构。
因此,使用这两种解决方案中的任何一种来生成一个函数,该函数将 return 从定界字符串 ToList() from Delimited String 中生成一个列表。然后做类似的事情:
/* test data */
create table dbo.foo ( id integer, idlist varchar(100) )
insert into foo
select 1, '1,2,3,4,5'
union
select 2, '1,5'
/* end test data */
declare @arr varchar(100)
set @arr = ''
select @arr = @arr + a.arrValue + ','
from (
select count(x.arrValue) as cnt,
x.arrValue
from dbo.foo f
cross apply dbo.fnArray(f.idlist, ',') x
group by x.arrValue
having count(x.arrValue) = 1
) a
set @arr = left(@arr, len(@arr) - 1)
print @arr