我有以下表格
CREATE TABLE Company
(
Id INT
)
CREATE TABLE CompanyNumbers
(
CompanyId INT,
NumberText VARCHAR (255)
)
我想要的输出是伪代码
将公司A的所有数字作为单个逗号分隔的字符串给我,如果该字符串包含超过150个数字,则输出另一行,下一个150直到完成。
实现这一目标的最佳方法是什么?基本上输出150个这样的批次:
CompanyId | Batch
1 | 3344,444,5555,6444, 444, 44, 44555, 5555... > 150 of them
2 | 33343,33, 2233,3 (second row if more than 150)
我希望在存储过程中完成此操作。
答案 0 :(得分:3)
WITH cb AS
(
SELECT CompanyId, NumberText, ROW_NUMBER() OVER (PARTITION BY CompanyID ORDER BY NumberText) AS rn
FROM CompanyNumbers
)
SELECT CompanyID, batch,
(
SELECT CASE WHEN rn % 150 = 1 THEN '' ELSE ', ' END + NumberText AS [text()]
FROM cb
WHERE cb.CompanyID = cbd.CompanyID
AND rn BETWEEN cbd.batch * 150 + 1 AND cbd.batch * 150 + 150
FOR XML PATH('')
)
FROM (
SELECT DISTINCT CompanyID, FLOOR((rn - 1) / 150) AS batch
FROM cb
) AS cbd