Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sql server中压缩关键字上的数据_Sql_Sql Server - Fatal编程技术网

在sql server中压缩关键字上的数据

在sql server中压缩关键字上的数据,sql,sql-server,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 尝试使用Monator Pro,但未能达到预期效果。我真的想不出一种方法可以从SQL开始。请提供帮助。高级方法: 使用光标逐行浏览表格 追加到临时变量,直到该行读取“END”,然后将临时变量的内容写入另一个表上的行 遍历,直到到达表的末尾 可能有一种更优雅、不基于光标的方式来完成这项工作,但这将完成这项工

我有一个这样的测试台-

Field
A
B
C
END
D
E 
F 
END
G
H
I
END
我想用这种格式压缩关键字END上的数据-

Field
A|B|C
D|E|F
G|H|I
尝试使用Monator Pro,但未能达到预期效果。我真的想不出一种方法可以从SQL开始。请提供帮助。

高级方法:

使用光标逐行浏览表格

追加到临时变量,直到该行读取“END”,然后将临时变量的内容写入另一个表上的行

遍历,直到到达表的末尾

可能有一种更优雅、不基于光标的方式来完成这项工作,但这将完成这项工作。

这可能会有所帮助

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
编辑


创建了一个字段来测试这一点。

字段是表中唯一的列吗?是。问题是两个连续端点之间的行数可能不同。我唯一的优势就是这个关键字。我不知道任何可能的方法,因为你不能可靠地按字段排序,也不知道关键字出现在哪一行之间。也许你可以在你的前端应用程序中处理这个问题?是的,不能在现场使用order by。如果不能使用order by,就不能保证你会按照你想要的顺序在表中进行操作。我实际上有100多万行。代码已经运行了10个多小时了。会让你知道结果。你能先在小一点的桌子上试试看它是否适合你吗?尝试选择前1000*名进入。。。构造来填充一些临时表并检查它。已经完成了。它很好用。但在等待以Varcharmax为例的完整数据集的结果时,我认为既然我的解决方案有效,你应该将此标记为答案。如果它适用于10多张唱片,它也将适用于100万张唱片。但是,你不应该试图弄清楚怎么做,而应该检查一下为什么要这样做。对一百万条记录进行复杂的计算显然是一种棘手的情况,如果可能的话,必须消除这种情况。以这种方式获取数据是您应该尽量避免的事情。感谢您的帮助。