2011-10-05 142 views
0

我试图让这个在这种情况下的SQL枢轴?

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

如果转角柱(日期)是已知的,那么你可以使用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

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) 

SQL Fiddle with Demo