压缩 sql 服务器中关键字的数据

Compress data on a key word in sql server

我有一个这样的测试table-

Field
A
B
C
END
D
E 
F 
END
G
H
I
END

我想以这种格式压缩关键字 "END" 上的数据-

Field
A|B|C
D|E|F
G|H|I

尝试使用 Monarch Pro,但无法获得预期的结果。我真的想不出在 SQL 中开始这个的方法。请帮忙。

高级方法:

使用光标逐行浏览 table。

追加到一个临时变量直到行读取 'END' 然后将临时变量的内容写入不同 table.

上的一行

迭代直到到达 table 的末尾。

可能有一种更优雅的、基于非游标的方法来执行此操作,但这将完成工作。

这可能会有所帮助。

DECLARE @WORD VARCHAR(300)
SELECT @WORD = COALESCE(@WORD + '|','') + Field  FROM [YourTable]
SELECT @WORD = REPLACE(@WORD, 'END', '$')

SELECT @WORD Field INTO #A

;WITH c(FieldOutput, Field) as (
select CAST(LEFT(Field, CHARINDEX('$',Field+'$')-2) AS VARCHAR(100)),
    STUFF(Field, 1, CHARINDEX('$',Field+'$')+1, '')
from #A
where ISNULL(Field, '') <> ''
union all
select CAST(LEFT(Field, CHARINDEX('$',Field+'$')-2) AS VARCHAR(100)),
    STUFF(Field, 1, CHARINDEX('$',Field+'$')+1, '')
from c
where ISNULL(Field, '') <> ''
)

select FieldOutput AS Field
from c

编辑

创建了一个 fiddle 来测试它。