Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/24.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 Server_Tsql_Split - Fatal编程技术网

Sql server 在单列表中重复值

Sql server 在单列表中重复值,sql-server,tsql,split,Sql Server,Tsql,Split,我知道这个标题不是最好的,但我不能制定一个更好的 我有一个类似于STRING_SPLIT的函数,它返回一个单列表,每个拆分一行。我需要做的是保持新行中其他列的值相同 我有一个临时表,其中有许多行,如下所示: INSERT INTO #TEMP([A], [ToSplit], [C], [D]) SELECT '549618', 'AAA, BBB', '1.7', '6' 我想把这条线变成两条线,一条带AAA,另一条带BBB,其他值保持相等 我在选择列表中尝试: SELECT *, (SELE

我知道这个标题不是最好的,但我不能制定一个更好的

我有一个类似于STRING_SPLIT的函数,它返回一个单列表,每个拆分一行。我需要做的是保持新行中其他列的值相同

我有一个临时表,其中有许多行,如下所示:

INSERT INTO #TEMP([A], [ToSplit], [C], [D]) SELECT '549618', 'AAA, BBB', '1.7', '6'
我想把这条线变成两条线,一条带AAA,另一条带BBB,其他值保持相等

我在选择列表中尝试:

SELECT *, (SELECT * FROM [dbo].[ufn_split](ToSplit,',')) FROM #TEMP
错误:子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时

然后作为我在中使用的一个条件,因为它是唯一允许子查询的:

SELECT A, ToSplit FROM #TEMP 
WHERE ToSplit IN (SELECT * FROM [dbo].[ufn_split](ToSplit,','))
没有错误,但它只返回不需要拆分的行。它只适用于LIKE,这是不允许的

SELECT * FROM [dbo].[ufn_split]((SELECT ToSplit FROM #TEMP),',')
因此,我尝试在方法中放置一个子查询,以创建一个每行具有一个拆分值的单列表,我将逐行执行,在TEMP上使用'LIKE%ToSplit%,但同样,子查询是不允许的

SELECT * FROM [dbo].[ufn_split]((SELECT ToSplit FROM #TEMP),',')
错误:子查询返回的值超过1。当子查询在=、!=、=或者当子查询用作表达式时

我的问题是,如何拆分ToSplit中的值并保留其他列的值?

请这样尝试。使用交叉应用


这将在SQL SERVER 2016上起作用,并且可以达到无限值

SELECT
  t.*, LTRIM([value])
FROM #TEMP t
CROSS APPLY string_split([ToSplit], ',')

你的回答似乎对我有用。你能不能再详细解释一下它为什么会起作用?也许可以编辑这个问题?不管怎样,我都会接受它作为答案,但它可以更清楚地说明。应用运算符仅用于此目的。你可以从中读到更多。它所做的是为每个外部值调用interval子查询。我们还可以在查询中提供where子句。这实际上是我在SQL Server中最喜欢的东西之一。使用示例行提供示例输出小心使用拆分器。如果它有一个while循环或一个游标,你应该考虑用一个基于集合的方法来替换它。你的查询确实有效。你能不能再详细说明一下它是如何工作的以及为什么工作的?看起来很简单。它如何知道交叉应用结果适合于何处?您好,将交叉应用视为逐行的内部联接,但ON条件将成为子查询中的where条件。在这种情况下,没有任何地方可以应用拆分的结果。字符串拆分函数是将列拆分为拆分的第二个表。希望能有帮助。