我有一个这样的测试表 -
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中开始的方法。请帮忙。
答案 0 :(得分:1)
这可能会有所帮助。
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来测试它。
答案 1 :(得分:0)
高级方法:
使用光标逐行遍历表格。
附加到临时变量,直到该行显示为&#39; END&#39;然后将temp变量的内容写入另一个表上的一行。
迭代直到你到达桌子的尽头。
这可能是一种更优雅,基于非游标的方式,但这将完成工作。