Один из возможных способов - использовать таблицы подсчета, как показано ниже
См. Рабочую демонстрацию
; with detailedSet as
(
select
Groupid,
GroupValue=abs(GroupValue),
biggest=max(GroupValue) over (partition by Groupid),
totalNumbers= count(1) over (partition by Groupid)
from num
)
,
possibleLCMValues as
(
select Groupid, counter
from detailedSet b
cross apply
(
select counter= row_number() over ( order by (select null)) * biggest
from sys.objects o1 cross join sys.objects o2
)c
where c.counter%GroupValue =0
group by Groupid, counter
having count(1)=max(totalNumbers)
)
,
LCMValues as
(
select
Groupid,
LCM=min(counter)
from possibleLCMValues
group by Groupid
)
select * from LCMValues