我有这个表格:
create table Test (Value varchar(111))
insert Test select 'a,b,c'
我想创建一个表值函数,在其中传递
Test.Value
,并返回下表格:
其中 Value
来自于 Test
表,Item
的值以以下方式生成:首项是其本身的全部值(在示例中包含三个逗号分隔值),一旦没有任何三个逗号分隔值,我们从左到右去拿两个逗号分隔值。我们严格从左到右进行处理,因此不需要像
a,c
或 b,a
这样的项目。最后,我们继续进行处理只有一个逗号分隔值,即 a
、b
和 c
。
ItemLayer
仅是正在处理的层。显然,分隔符应该是逗号,并且 tvf
应该返回 Item
和 ItemLayer
。我认为查询应该长这样:SELECT *
FROM Test t
CROSS JOIN fn_getItemsFromValues(t.Value) f
我认为应该有一种递归的通用表达式(CTE)方式,但是我无法想出如何实现。
如果Value
的值为'a,b,c,d'
,则以下是输出结果:
我正在使用SQL Server 2017。我尝试了以下方法,但我卡住了。似乎有什么地方不对。
DECLARE @data VARCHAR(100) = 'a,b,c'
;WITH CTE AS
(
SELECT @data TXT, LEFT(@data,1) Col1
UNION ALL
SELECT STUFF(TXT,1,1,'') TXT, LEFT(TXT,1) Col1 FROM CTE
WHERE LEN(TXT) > 0
)
select Col1,txt from CTE
'a,c'
作为一种组合呢? - Gordon Linoff