Это ответ, который я дал другому постеру, но он демонстрирует именно то, о чем вы просите:
SELECT
seqid = identity(int, 1, 1),
event_id,
S.name
INTO #EventNames
FROM
celcat200809.dbo.CT_EVENT_STAFF ES
LEFT JOIN celcat200809.dbo.CT_STAFF S ON ES.staff_id = S.staff_id
ORDER BY
event_id,
S.name
SELECT
EN.event_id,
Max(CASE seqid - minseqid WHEN 0 THEN EN.name ELSE '' END))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 1 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 2 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 3 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 4 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 5 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 6 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 7 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 8 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 9 THEN EN.name ELSE NULL END, ''))
+ Max(Coalesce(' + ' + CASE seqid - minseqid WHEN 10 THEN EN.name ELSE NULL END, ''))
FROM
#EventNames EN
INNER JOIN (
SELECT event_id, minseqid = Min(seqid) FROM #EventNames GROUP BY event_id
) X ON EN.event_id = X.event_id
GROUP BY EN.event_id
Вы можете игнорировать выражения 10 Max (). Ключевые части:
- Вставьте значения во временную таблицу со столбцом идентификаторов, отсортированным по порядку по группам.
- Получить минимальное значение для группы с помощью совокупного запроса (производная таблица X выше)
- Вычтите минимальное значение из значения идентификатора (и добавьте 1, если вам нужно начать нумерацию с 1) и вуаля, у вас есть номера, которые перезапускаются с 1 для каждой группы!
Если вы собираетесь использовать результаты выбора более двух раз, то во время создания добавьте еще один столбец int во временную таблицу и обновите его новыми числами вместо того, чтобы вычислять его каждый раз. Я думаю о том, когда производительность будет лучше, чтобы сделать обновление ... тестирование в порядке.