压缩sql server中关键字的数据

时间:2015-01-12 18:32:54

标签: sql sql-server

我有一个这样的测试表 -

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中开始的方法。请帮忙。

2 个答案:

答案 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变量的内容写入另一个表上的一行。

迭代直到你到达桌子的尽头。

这可能是一种更优雅,基于非游标的方式,但这将完成工作。