这用于STRING_AGG
将字符串聚合成一个长字符串,然后将一个 Tally 表拆分为新行。假设您有一个列要订购。如果你不这样做,你就无法实现你所追求的,因为表中的数据存储在无序堆中。
CREATE TABLE dbo.YourTable (YourID int IDENTITY,
Yourcolumn varchar(5));
INSERT INTO dbo.YourTable (Yourcolumn)
VALUES('addcd'),
('swrrh'),
('dggdd'),
('wdffa');
GO
WITH N AS(
SELECT N
FROM (VALUES(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL),(NULL))N(N)),
Tally AS(
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL))-1 AS I
FROM N N1, N N2, N N3, N N4), --This is likely over kill here, but I've assumed you'll have a much larger data set
Agg AS(
SELECT STRING_AGG(YT.YourColumn,'') WITHIN GROUP (ORDER BY YT.YourID) AS YourString
FROM dbo.YourTable YT)
SELECT SUBSTRING(A.YourString,(I*4)+1,4)
FROM Tally T
CROSS JOIN Agg A
WHERE SUBSTRING(A.YourString,(I*4)+1,4) <> '';
GO
DROP TABLE dbo.YourTable;
db<>小提琴