【发布时间】:2020-12-22 17:19:13
【问题描述】:
这是我的问题。我正在输出一个拆分函数,它是一个单列表, 并且需要将输出转置为 2 列。
即假设我使用
SELECT colNum = (((ROW_NUMBER() OVER(ORDER BY(SELECT NULL))) - 1) % 2) + 1
,InsertData
FROM fn_split('the quick brown fox jumped over the lazy dog test the quick brown fox jumped over the lazy dog test the quick brown fox jumped over the lazy dog test')`
导致
|colNum| InsertData |
|------|--------------------------------|
|1 |the quick brown fox jumped ove |
|------|--------------------------------|
|2 |r the lazy dog test the quick |
|------|--------------------------------|
|1 |brown fox jumped over the lazy |
|------|--------------------------------|
|2 | dog test the quick brown fox |
|------|--------------------------------|
|1 |jumped over the lazy dog test |
|------|--------------------------------|
我怎么把它变成这个
|-------------------------------|-------------------------------|
| 1 | 2 |
|-------------------------------|-------------------------------|
|the quick brown fox jumped ove | r the lazy dog test the quick |
|-------------------------------|-------------------------------|
|brown fox jumped over the lazy | dog test the quick brown fox |
|-------------------------------|-------------------------------|
|jumped over the lazy dog test |-------------------------------|
|-------------------------------|-------------------------------|
我尝试了所有我知道的方法,但没有任何效果。
我得到了一个支点,但中间有空单元格。
我想我错过了共同因素,但我不确定如何为每个集合生成一个。
【问题讨论】:
-
什么是
fn_split?问题似乎是这样,但我们没有它的代码。 -
“通用”拆分函数将有第二个参数作为分隔符,上面不包含一个。显然它是在分割某些东西的价值,但我不知道是什么,没有 DDL,我们无法复制您的问题。
-
它是通用的拆分功能。我不能为它发布代码,因为它是我专有的。但总的来说,它接受任何字符串并将其拆分为特定长度的块。实际函数接受第二个参数确定您想要的长度。 FN 仅返回带有拆分字符串的单列。我的选择添加了一个行编号。现在我需要的下一步是获取输出并将其转换为每个连续的行被旋转为 2 列。因此行号在每第三行重置一次。但是有没有办法添加每 2 行重置一次的组号?
-
@Larnu 问题不在于拆分功能。忽略他们问题的那一部分。他们只是想转置数据,以便第 1 列具有 colNum = 1 的值,第 2 列具有 colNum = 2 的值,它们的功能和它的工作原理并不真正相关。
-
如果它没有返回拆分的序号位置,@ChadBaldwin。以及我为什么要问。
标签: sql-server pivot