诚请大家指教:有表table1(name,Mon,Tue,Wed),意义为商人name,在Mon,Tue,Wed仅仅这三天的收入统计,具体数据为:
table1
-------------------------
name  Mon  Tue  Wed
A     11   12   13
B     45   46   78
C     77   87   8    
-------------------------
当我在fastreport的MasterData对table1表的数据集进行绑定如如下显示格式后的结果为:
MasterData1
------------------------
day   name  income
Mon   A     11
Tue   A     12
Wed   A     13Mon   B     45
Tue   B     46
Wed   B     78Mon   C     77
Tue   C     87
Wed   C     8
------------------------
考虑到这样浪费空间,所以我在MasterData中进行了分栏,栏数为3,则显示结果为:
MasterData1
--------------------------------------------------------------------------
day   name  income       day   name  income          day   name  income
Mon   A     11           Mon   B     45              Mon   C     77
Tue   A     12           Tue   B     46              Tue   C     87
Wed   A     13           Wed   B     78              Wed   C     8
-----------------------------------------------------------------------------
(1)                     (2)                        (3)
但是,显然
day
Mon
Tue
Wed
这一列是重复的,我曾经通过脚本进行显示控制:当将要显示的列为(1)列时,则显示day这列数据,当将要显示的列为(2)(3)两列时,则进行隐藏,则效果为:MasterData1
--------------------------------------------------------------------------
day   name  income       空   name  income          空   name  income
Mon   A     11           空   B     45              空   C     77
Tue   A     12           空   B     46              空   C     87
Wed   A     13           空   B     78              空   C     8
-----------------------------------------------------------------------------
(4)                     (5)                        (6)
但是明显(5)(6)列中,由于对MasterData进行等3份分栏,所以(4)(5)(6)列的宽度都是一样的,就造成了空白列的存在,我的最终效果是想为:
MasterData1
--------------------------------------------------------------------------
day   name  income   name  income    name  income
Mon   A     11       B     45        C     77
Tue   A     12       B     46        C     87
Wed   A     13       B     78        C     8
-----------------------------------------------------------------------------
比较紧凑的显示,没有多余的空余列。
问题叙述有些长,请谅解,谢谢先!!

解决方案 »

  1.   

    你最好还是在sql中组织数据吧,也就是竖表变横表
    参考博士的博客
    http://blog.csdn.net/liangpei2008/archive/2009/04/26/4124486.aspx
      

  2.   


    declare @t table([day] varchar(3),[name] varchar(1),[income] int)
    insert @t
    select 'Mon','A',11 union all
    select 'Tue','A',12 union all
    select 'Wed','A',13 union all
    select 'Mon','B',45 union all
    select 'Tue','B',46 union all
    select 'Wed','B',78 union all
    select 'Mon','C',77 union all
    select 'Tue','C',87 union all
    select 'Wed','C',8;with t
    as
    (
    select distinct([day]) from @t

    select t.[DAY],a.[name],a.[income],b.[name],b.[income],c.[name],c.[income]
    from t
    left join @t a on (t.[day]=a.[day] and a.name='A')
    left join @t b on (t.[day]=b.[day] and b.name='B')
    left join @t c on (t.[day]=c.[day] and c.name='C')--结果:
    DAY     Name  Income  Name  Income  Name  Income
    Mon     A     11      B     45      C     77
    Tue     A     12      B     46      C     87
    Wed     A     13      B     78      C     8按上面 SQL 语句(MSSQL 2005-2008),就可以轻松打印出你需要的结果。
      

  3.   

    谢谢大牛们的关注,我现在有两个想法,第一是数据库方面,采用横纵转置:将day页设计为一个字段计算好纸张的位置,然后生成各个字段,则一条记录为(day,name1,income1,name2,income2,.....)如npkaida显示的结果那样。第二则是采用Cross或者纵向MasterBand试试。再次感谢大家!