在这种情况下使用SQL Pivot?

在这种情况下使用SQL Pivot?,sql,sql-server,pivot,Sql,Sql Server,Pivot,我正在努力做到这一点 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

我正在努力做到这一点

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语句,但我看到的所有示例似乎都很简单

提前感谢。

如果轴列(您的日期)已知,则您可以使用轴操作符获取结果:

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;

很可能你不知道这些值,如果是这样的话,你需要使用相同的技术,但要以动态的方式进行研究。一个很好的例子是

根据您提供的示例数据,我猜您将有一个很长的日期列表,需要将其转换为列。虽然您可以像其他答案一样使用静态轴心,但也可以使用类似于以下内容的动态轴心:

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)