sqlserver一個(gè)動(dòng)態(tài)交叉表的范例

字號(hào):

--建立測(cè)試環(huán)境
    set nocount on
    create table test(model varchar(20),date int ,qty int)
    insert into test select ’a’,’8’,’10’
    insert into test select ’a’,’10’,’50’
    insert into test select ’b’,’8’,’100’
    insert into test select ’b’,’9’,’200’
    insert into test select ’b’,’10’,’100’
    insert into test select ’c’,’10’,’200’
    insert into test select ’d’,’10’,’300’
    insert into test select ’e’,’11’,’250’
    insert into test select ’e’,’12’,’100’
    insert into test select ’f’,’12’,’150’
    go
    --測(cè)試
    declare @sql varchar(8000)
    set @sql=’select model,’
    select @sql=@sql+’sum(case when date=’’’+cast(date as varchar(10))+’’’ then qty else 0 end)[’+cast(date as varchar(10))+’],’
    from (select distinct top 100 percent date
    from test order by date)a
    set @sql =left(@sql,len(@sql)-1)+’ from test group by model’
    exec(@sql)
    --刪除測(cè)試環(huán)境
    drop table test
    set nocount off
    /**//*
    model      8     9     10    11    12
    -------------------- ----------- ----------- ----------- ---------- ----
    a       10    0     50    0     0
    b       100    200    100    0     0
    c       0     0     200    0     0
    d       0     0     300    0     0
    e       0     0     0     250    100
    f       0     0     0     0     150
    */