我正在努力做到这一点
DATE Insurance Type Billed Rate
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
看起来像这样
Insurance Type Billed 2/28/2011 0:00 3/31/2011 0:00
BC/BS INP B 0.6383 0.69
BC/BS OUT B 0.5216 0.6136
BC/BS INP U 0.1988 0.1877
BC/BS OUT U 0.3493 0.3567
这样日期字段行数据最终成为每个不同值的列标题。我想我可以利用PIVOT语句,但我看到的所有例子似乎都很简单。
提前致谢。
答案 0 :(得分:0)
如果已知枢轴列(您的日期),那么您可以使用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;
你可能不知道这些值,如果是这种情况,你需要研究使用相同的技术但是以动态的方式。一个很好的例子是here
答案 1 :(得分:0)
根据您提供的示例数据,我猜您将有一个很长的日期列表,您需要将其转换为列。虽然您可以像其他答案一样使用静态轴,但您可以使用类似于下面的动态轴:
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(10), date, 101))
from test
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query
= 'SELECT Insurance, [Type], Billed,' + @cols + ' from
(
SELECT [date],
Insurance,
[Type],
Billed,
Rate
FROM test
) x
pivot
(
sum(Rate)
for [date] in (' + @cols + ')
) p
order by billed'
execute(@query)