Если столбцы сводок (ваши даты) известны, то вы можете использовать оператор PIVOT для получения результатов:
declare @t table (date datetime, Insurance varchar(10), Type char(3), Billed char(1), Rate decimal(10,4));
insert into @t
values ('2/28/2011 0:00', 'BC/BS', 'INP', 'B', '0.6383'),
('2/28/2011 0:00', 'BC/BS', 'OUT', 'B', '0.5216'),
('2/28/2011 0:00', 'BC/BS', 'INP', 'U', '0.1988'),
('2/28/2011 0:00', 'BC/BS', 'OUT', 'U', '0.3493'),
('3/31/2011 0:00', 'BC/BS', 'INP', 'B', '0.69'),
('3/31/2011 0:00', 'BC/BS', 'OUT', 'B', '0.6136'),
('3/31/2011 0:00', 'BC/BS', 'INP', 'U', '0.1877'),
('3/31/2011 0:00', 'BC/BS', 'OUT', 'U', '0.3567')
select *
from ( select [date] as pivot_col,
Insurance,
[Type],
Billed,
Rate
from @t
) as d
pivot ( sum(Rate) for pivot_col in ([2/28/2011],[3/31/2011])
) as p;
Скорее всего, вы не знаете значений, и в этом случае вам нужно будет использовать ту же технику, но динамически. Отличным примером является здесь