У меня есть список идентификаторов образцов для сайта в формате: имя сайта, номер образца, так что для данного сайта существует n номеров образцов. Например, данные могут быть:
site1 | 1
site1 | 2
и т. д. до произвольного n.
Используя следующий пример в качестве аналогичного примера, эти данные ниже получат ответ от последнего оператора выбора:
CREATE TABLE #SiteWithId(SiteId VARCHAR(50), SampleNumber INT)
INSERT INTO #SiteWithId
(
SiteId,
SampleNumber
)
values
( 'test', -- SiteId - varchar(50)
1 -- SampleNumber - int
),
('test',2),
('test',3),
('test',4),
('test',6),
('test',7)
SELECT * FROM #SiteWithId
DROP TABLE #SiteWithId
--the answer
SELECT 'test', '1-4,6-7'
Обратите внимание, что отсутствующий элемент создает разрыв в окончательном ответе.
Я знаю, что могу прокрутить набор данных на C# и создать такой элемент. Но кто-нибудь знает, как создать такое значение, используя только sql, чтобы я мог просто выдать нужные значения для отчета? Я думаю, что мог бы сделать цикл и в sql, но я боюсь, что это будет немасштабируемо, поскольку на самом деле это не то, для чего предназначен sql.
Есть ли лучший способ сделать это, кроме цикла в sql или c #?