2011-10-05 257 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