这是我用来连接前两行的代码,每行各有6个字符。每行数据设置为6.
我的问题是它只返回所需的第一个连接,并且不会影响下一行。
DECLARE @r_strands VARCHAR(MAX)
SET @r_strands=''
SELECT @r_strands= @r_strands + R_Strands
FROM rs_table
SELECT LEFT(@r_strands, +12) AS text
rs_table
r_strands
thedog
wentto
hisbed
wherei
placed
foodto
eatfor
supper
以上是我希望每两行连接的单列表的示例
EX. result desired
r_strands
thedogwentto
hisbedwherei
placedfoodto
eatforsupper
答案 0 :(得分:1)
您可以使用ROW_NUMBER
成对连续两个r_strands
。然后使用FOR XML PATH('')
进行连接:
如果您有Id
来确定订单,则可以将ORDER BY
替换为Id
而不是SELECT NULL
。
;WITH Cte AS(
SELECT *,
RN = (ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) + 1) / 2
FROM rs_table
)
SELECT
r_strands = (
SELECT '' + r_strands
FROM Cte
WHERE RN = c.RN
FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'
)
FROM Cte c
GROUP BY RN
<强> RESULT 强>:
| r_strands |
|--------------|
| thedogwentto |
| hisbedwherei |
| placedfoodto |
| eatforsupper |
答案 1 :(得分:0)
假设您有一个行号列(称之为&#34; id&#34;),您可以自己加入id上的相邻列,并使用+ string concatination运算符连接字符串:
free()
答案 2 :(得分:0)
declare @t table (id int, r_strands varchar(100));
insert into @t values
(1, 'thedog'),
(2, 'wentto'),
(3, 'hisbed'),
(4, 'wherei'),
(5, 'placed'),
(6, 'foodto'),
(7, 'eatfor'),
(8, 'supper');
select r_strands + next_row
from
(
select *,
next_row = lead(r_strands) over(order by id),
is_mod = id % 2
from @t
) x
where is_mod != 0;