压缩 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 来测试它。
我有一个这样的测试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 来测试它。