В качестве альтернативы union вы можете использовать min и max в подзапросе, а затем использовать внутреннее соединение. непроверено
select [ARCHIVE_HEADER].archive,
[ARCHIVE_HEADER].cr_time,
[ARCHIVE_HEADER].group_name,
[VOLUME].vol_name,
[ARCHIVE_HEADER].display_name
from ARCHIVE_HEADER
inner join (
select min(archive) FirstArchive, max(archive) LastArchive
from ARCHIVE_HEADER
inner join VOLUME on ARCHIVE_HEADER.volume_key = VOLUME.volume_key
where VOLUME.vol_name = @Volume
) MinMax_Archive
on [ARCHIVE_HEADER].archive = FirstArchive
or [ARCHIVE_HEADER].archive = LastArchive
inner join VOLUME on ARCHIVE_HEADER.volume_key = VOLUME.volume_key
where VOLUME.vol_name = @Volume
order by [ARCHIVE_HEADER].archive
Для нескольких томов ВСЕ тома должны содержать список: еще больше непроверенных
select [ARCHIVE_HEADER].archive,
[ARCHIVE_HEADER].cr_time,
[ARCHIVE_HEADER].group_name,
[VOLUME].vol_name,
[ARCHIVE_HEADER].display_name
from ARCHIVE_HEADER
inner join VOLUME on ARCHIVE_HEADER.volume_key = VOLUME.volume_key
inner join (
select volume_key min(archive) FirstArchive, max(archive) LastArchive
from ARCHIVE_HEADER
group by volume_key
) MinMax_Archive
on ARCHIVE_HEADER.volume_key = MinMax_Archive.volume_key
and ( [ARCHIVE_HEADER].archive = FirstArchive
or [ARCHIVE_HEADER].archive = LastArchive)
order by vol_name, [ARCHIVE_HEADER].archive
Чтобы ограничить его некоторымитома, вы можете перечислить их напрямую, используя IN:
select [ARCHIVE_HEADER].archive,
[ARCHIVE_HEADER].cr_time,
[ARCHIVE_HEADER].group_name,
[VOLUME].vol_name,
[ARCHIVE_HEADER].display_name
from ARCHIVE_HEADER
inner join VOLUME on ARCHIVE_HEADER.volume_key = VOLUME.volume_key
inner join (
select volume_key min(archive) FirstArchive, max(archive) LastArchive
from ARCHIVE_HEADER
group by volume_key
) MinMax_Archive
on ARCHIVE_HEADER.volume_key = MinMax_Archive.volume_key
and vol_name in ('599722', '458933', '342902')
and ( [ARCHIVE_HEADER].archive = FirstArchive
or [ARCHIVE_HEADER].archive = LastArchive)
order by vol_name, [ARCHIVE_HEADER].archive
Если вы хотите использовать переменную для нескольких томов, то это немного сложнее.Вы захотите создать табличную переменную (или временную таблицу) из vol_name, которую вы хотите, а затем внутренне соединить эту таблицу с остальными.