我有以下情况:
表data_table:
ID data
1 a;b;c
2 d;e;f
3 j
function datasplit:
dbo.[datasplit]('a;b;c', ';')
将导致结果表:
items
a
b
c
我想生成一个包含拆分数据的输出
ID splitted_data
1 a
1 b
1 c
2 d
2 e
2 f
3 j
我试图使用的SQL查询:
select ID, (select * from dbo.[datasplit](data, ';')) as splitted_data
FROM
data_table
我得到了错误信息:
Msg 512,Level 16,State 1,Line 11 子查询返回的值超过1。当子查询遵循=,!=,<,< =,>,> =或子查询用作表达式时,不允许这样做。
是否有使用常规查询生成所需结果的方法,或者是否需要SP或其他函数?
答案 0 :(得分:0)
@david,尝试使用以下解决方案,让我知道这对您有用吗?
[(2, 2), (3, 2), (5, 2)]
答案 1 :(得分:0)
使用apply
调用返回一组值的函数:
select t.ID, ds.col
from data_table t cross apply
dbo.datasplit(data, ';') as ds(col);
答案 2 :(得分:0)
您无法以TVF
运营商的方式执行APPLY
:
select t.ID, t1.out_put_col_via_function as splitted_data
from data_table t
cross apply dbo.datasplit(t.data, ';') t1;