Вот как я бы подошел к проблеме.Я изначально думал, что вы могли бы использовать оператор применения, однако с объединенным подходом работать проще всего.Основное различие между моим ответом и ответом Эрея (спасибо мне очень понравился подход) состоит в том, что я использую некоррелированные подзапросы в строке, чтобы генерировать значения суммы и поддерживать уникальное число, спускаясь по каждому из столбцов.
Я бы сказал, что это МОЖЕТ быть достигнуто с использованием динамического SQL для неизвестного числа столбцов, но у меня нет времени или ресурсов, чтобы попробовать это сейчас.Пожалуйста, смотрите код ниже, я надеюсь, что это поможет.
declare @numbers table
(
numberid int
);
insert into @numbers (numberid)
values
(1),
(2),
(4),
(6),
(8),
(16),
(32);
select numberid as [1], null as [2], null as [3], null as [4], null as [5], null as
[6], (select sum(numberid) from @numbers where numberid=1) as [sum] from @numbers
where numberid =1
union
select (select numberid from @numbers where numberid=1), numberid, null, null, null,
null, (select sum(numberid) from @numbers where numberid in (1, 2)) from @numbers
where numberid =2
union
select (select numberid from @numbers where numberid=1), (select numberid from
@numbers where numberid=2), numberid, null, null, null, (select sum(numberid) from
@numbers where numberid in (1, 2, 4)) from @numbers where numberid =4
union
select (select numberid from @numbers where numberid=1), (select numberid from
@numbers where numberid=2), (select numberid from @numbers where numberid=4),
numberid, null, null, (select sum(numberid) from @numbers where numberid in (1, 2, 4,
8)) from @numbers where numberid =8
union
select (select numberid from @numbers where numberid=1), (select numberid from
@numbers where numberid=2), (select numberid from @numbers where numberid=4), (select
numberid from @numbers where numberid=8), numberid, null, (select sum(numberid) from
@numbers where numberid in (1, 2, 4, 8, 16)) from @numbers where numberid =16
union
select (select numberid from @numbers where numberid=1), (select numberid from
@numbers where numberid=2), (select numberid from @numbers where numberid=4), (select
numberid from @numbers where numberid=8), (select numberid from @numbers where
numberid=16), numberid, (select sum(numberid) from @numbers where numberid in (1, 2,
4, 8, 16, 32)) from @numbers where numberid =32;