select SUM(CASE WHEN day(PZ01) = 1 THEN PZ02 ELSE 0 END) AS PZ02,SUM(CASE WHEN day(PZ01) = 2 THEN PZ02 ELSE 0 END) AS PZ02
 from ##pzx where convert(varchar(7),pz01,120)='2009-09'group by pz01 order by pz01
運行后結果:
 pz02      pz05               pz02           pz05
 138.92   83.59          0               0
 0  0                102.92          77.99
 0  0                 0               0   
....現在想將結果格式調整為:
               1            2
pz02   138.91      102.92
pz05   83.59       77.99不要把例子我看,我對這例子看了半天了。寫出來的sql還是不能達到要求。
一天35個 字段賦值,31天*35。鬱悶死!
哪位把正確的sql我參照一下。我還得往下排!    

解决方案 »

  1.   

    以下是現在整合后表中的數據(只是一部分,字段太多不全部擺出來)
    pz01                     pz02    pz03   pz04     pz05    
    2009-09-01 00:00:00.000 138.92 180.28 1173 83.59
    2009-09-02 00:00:00.000 102.92 160.97 973 77.99
    2009-09-03 00:00:00.000 132.99 167.13 1023 71.51
    我現在想將格式轉換成
            1             2             3
    pz02  138             102.92        132.99 
    pz05  83.59      77.99         71.51因為報表中要跑月份的,所以,,,
    我也是想先在數據庫中把數據都擺好在賦值到報表上去。
    縱向字段有35個,橫向天數31天
      

  2.   

    ---参考下
    /*
    表tb,数据如下:
    项目种类  业绩  提成
    洗吹类  200   10
    外卖      100   5
    合计      300   15
    转换成:
    项目种类  洗吹类  外卖  合计
    业绩      200     100   300
    提成      10      5     15
    */create table tb
    (
      项目种类 varchar(10),
      业绩     int,
      提成     int
    )insert into tb(项目种类,业绩,提成) values('洗吹类',200,10)
    insert into tb(项目种类,业绩,提成) values('外卖'  ,100,5)
    insert into tb(项目种类,业绩,提成) values('合计'  ,300,15)
    goselect 项目种类,sum(洗吹类) as 洗吹类 , sum(外卖) as 外卖 , sum(合计) as 合计 from
    (
      select 项目种类 = '业绩',
             洗吹类   = case when 项目种类 = '洗吹类' then 业绩 else 0 end,
             外卖     = case when 项目种类 = '外卖'   then 业绩 else 0 end,
             合计     = case when 项目种类 = '合计'   then 业绩 else 0 end
      from tb
    union all
      select 项目种类 = '提成' ,
             洗吹类   = case when 项目种类 = '洗吹类' then 提成 else 0 end,
             外卖     = case when 项目种类 = '外卖'   then 提成 else 0 end,
             合计     = case when 项目种类 = '合计'   then 提成 else 0 end
      from tb
    ) m
    group by 项目种类
    order by 项目种类 descdrop table tb/*
    项目种类 洗吹类      外卖        合计          
    -------- ----------- ----------- ----------- 
    业绩     200         100         300
    提成     10          5           15(所影响的行数为 2 行)
    */
      

  3.   

     --行列互换的通用存储过程(原著:邹建):将指定的表,按指定的字段进行行列互换*/create proc p_zj       @tbname sysname, --要处理的表名       @fdname sysname, --做为转换的列名       @new_fdname sysname='' --为转换后的列指定列名asdeclare @s1 varchar(8000) , @s2 varchar(8000),        @s3 varchar(8000) , @s4 varchar(8000),        @s5 varchar(8000) , @i varchar(10)select @s1 = '' , @s2 = '' , @s3 = '' , @s4 = '' , @s5 = '' , @i = '0'select @s1 = @s1 + ',@' + @i + ' varchar(8000)',       @s2 = @s2 + ',@' + @i + '=''' + case isnull(@new_fdname , '') when '' then ''       else @new_fdname + '=' end + '''''' + name + '''''''',       @s3 = @s3 + 'select @' + @i + '=@' + @i + '+'',['' + [' + @fdname +       ']+'']=''+cast([' + name + '] as varchar) from [' + @tbname + ']',       @s4 = @s4 + ',@' + @i + '=''select ''+@' + @i,       @s5 = @s5 + '+'' union all ''+@' + @i,       @i=cast(@i as int)+1from syscolumnswhere object_id(@tbname)=id and name<>@fdnameselect @s1=substring(@s1,2,8000),       @s2=substring(@s2,2,8000),       @s4=substring(@s4,2,8000),       @s5=substring(@s5,16,8000)exec('declare ' + @s1 + 'select ' + @s2 + @s3 + 'select ' + @s4 + 'exec(' + @s5 + ')') 
    gocreate table tb (pz01 varchar(10),pz02 numeric(10,2),pz03 numeric(10,2),pz04 numeric(10,2),pz05 numeric(10,2))
    insert into tb 
    select '2009-09-01', 138.92, 180.28, 1173, 83.59 
    union all 
    select '2009-09-02', 102.92, 160.97, 973, 77.99 
    union all 
    select '2009-09-03', 132.99, 167.13, 1023, 71.51 
     
    select  * from tb
    /*
    pz01 pz02 pz03 pz04 pz05
    -------------------------------------------------
    2009-09-01 138.92 180.28 1173.00 83.59
    2009-09-02 102.92 160.97 973.00 77.99
    2009-09-03 132.99 167.13 1023.00 71.51
    */exec p_zj 'tb', 'pz01' , 'pz' 
    /*
    pz 2009-09-01 2009-09-02 2009-09-03
    ------------------------------------------------------
    pz02 138.92 102.92 132.99
    pz03 180.28 160.97 167.13
    pz04 1173.00 973.00 1023.00
    pz05 83.59 77.99 71.51
    */go
    drop table tb
    go
    drop proc p_zj
      

  4.   

    #7樓的
    exec p_zj 'tb', 'pz01' , 'pz'
    這段是什麽意思?為什麽我在這報錯?