学校   学期    参考人数     女生    男生
         A      1       20           10     10
         A      2       40           10     30
         B      1       16            8     8
         B      2       30            15    15
         B      3       10            5      5
         C      4       10            5      5
   转化后的数据   学校     共几个学期        第1学期参考人数     第1学期女生的比例   第1学期男生的比例   第2学期参考人数 
 第2学期女生的比例   第2学期男生的比例      第3学期参考人数  第3学期女生的比例   第3学期男生的比例   第4学期参考人数  第4学期女生的比例   第4学期男生的比例  。。这里的表头需要根据学期来的  不能写死
得到的数据如A    2     20    50   50   40       25  75 
B    3     16    50  50    30       50  50   10  50  50
C    1                                                    10   50  50    
数据要对应到学期里面去。 这里是列举只有4个学期  但是实际有30多         

解决方案 »

  1.   


    没事 导出到EXCEL里面去 要给人家看
      

  2.   

    这个题目挺有意思的, 呵呵--演示数据
    create table tb(学校 varchar(10), 学期 int, 参考人数 int, 女生 int, 男生 int)
    insert tb select 'A', 1, 20, 10, 10
    insert tb select 'A', 2, 40, 10, 30
    insert tb select 'B', 1, 16, 8,  8
    insert tb select 'B', 2, 30, 15, 15
    insert tb select 'B', 3, 10, 5,  5
    insert tb select 'C', 4, 10, 5,  5
    go
    declare @sql varchar(max),@collist1 varchar(max),@collist2 varchar(max)select 
    @collist1 = isnull(@collist1,'[共几个学期],[') + a.c1+ltrim(b.学期)+a.c2 + '],[',
    @collist2 = isnull(@collist2,'[共几个学期],[') + a.c1+ltrim(b.学期)+a.c2 + ']=isnull([' + a.c1+ltrim(b.学期)+a.c2 + '],''''),[' 
    from (
    select c1 = '第', c2 = '学期参考人数' union all
    select c1 = '第', c2 = '学期女生的比例' union all
    select c1 = '第', c2 = '学期男生的比例'
    ) a ,(select distinct 学期 from tb) b order by b.学期set @collist1 = substring(@collist1,1,len(@collist1)-2)
    set @collist2 = substring(@collist2,1,len(@collist2)-2)set @sql = '
    with t1 as
    (
    select *,
    女生比例 = cast(女生*100.0/参考人数 as decimal(10,2)),
    男生比例 = cast(男生*100.0/参考人数 as decimal(10,2)), 
    共几个学期 = sum(1) over(partition by 学校)
    from tb
    )
    ,t2 as
    (
    select 学校, type = ''第''+ltrim(学期)+''学期参考人数'', 参考人数 = cast(参考人数 as varchar(10)) from t1
    union all
    select 学校, type = ''第''+ltrim(学期)+''学期女生的比例'', cast(女生比例 as varchar(10)) from t1
    union all
    select 学校, type = ''第''+ltrim(学期)+''学期男生的比例'', cast(男生比例 as varchar(10)) from t1
    union all
    select distinct 学校, type = ''共几个学期'', cast(共几个学期 as varchar(10)) from t1
    )
    select 学校,'+@collist2+' from t2 pivot (max(参考人数) for type in ('+@collist1+')) a'
    exec(@sql)/*
    学校         共几个学期                第1学期参考人数             第1学期女生的比例            第1学期男生的比例            第2学期参考人数             第2学期女生的比例            第2学期男生的比例            第3学期参考人数             第3学期女生的比例            第3学期男生的比例            第4学期参考人数             第4学期女生的比例            第4学期男生的比例
    ---------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- -------------------- --------------------
    A          2                    20                   50.00                50.00                40                   25.00                75.00                                                                                                                         
    B          3                    16                   50.00                50.00                30                   50.00                50.00                10                   50.00                50.00                                                          
    C          1                                                                                                                                                                                                                 10                   50.00                50.00(3 row(s) affected)
    */
    楼主,记得结贴哦
      

  3.   

    楼主的意思可能是给原始数据给客户看,客户到EXCEL里面也可以自己去统计。看来客户很BT!