Пакетный вывод в SQL Server - PullRequest
       10

Пакетный вывод в SQL Server

1 голос
/ 12 октября 2009

У меня есть таблицы, подобные следующей

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)

Я хочу, чтобы это было сделано в рамках хранимой процедуры.

1 Ответ

3 голосов
/ 12 октября 2009
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...