合同表
   合同编号          客户名称       合同金额      签定日期
   111                好好好          500         2003-12-10收款登记表
    合同编号         客户名称         收款金额      收款日期
     111             好好好           300          2003-12-11
     111             好好好           100          2003-12-12开出发票登记表
     合同编号         客户名称        开票金额      开票日期
      111             好好好           300          2003-12-11我现在通过一个DBGrid来显示报表,DBGrid里有这么多的列(Columus)
合同编号  客户名称 应收金额 已收金额  未收金额 已开发票(金额) 待开发票(金额)
请问怎么实现?最能够详细点,把代码和SQL也写一下,

解决方案 »

  1.   

    用FastReport,其中有一个FrPrintGrid控件,放到窗体上,将他的DBGrid属性设置到你的DBGrid,这样你的Grid上显示的什么,报表打印的就是什么
      

  2.   

    用一个dbgrid连接一个datasource,这个datasource连接一个query,
    query.sql.clear;
    query.sql.add:='select 合同编号 ,客户名称 from 合同表';
    然后在query中建立四个计算字段,分别对应已收金额 , 未收金额, 已开发票(金额), 待开发票(金额)。
    最后在query的onCalcFields()事件中计算出这几个金额就可以了。
      

  3.   

    "然后在query中建立四个计算字段,分别对应已收金额 , 未收金额, 已开发票(金额), 待开发票(金额)。
    最后在query的onCalcFields()事件中计算出这几个金额就可以了。"这个不知道怎么做?
      

  4.   

    select 合同编号,客户名称,
    sum(case when case a='应收金额' then je end) as '应收金额',
    sum(case when case a='已收金额'then je end) as '已收金额',
    sum(case when case a='開票金额'then je end) as '開票金额'
    sum(case when case a='待开发票'then je end) as '待开发票(金额)'
    from  
    (select  合同编号 , 客户名称,合同金额 as je,a='应收金额'
    from 合同表
    union all
    select 合同编号 , 客户名称,sum(收款金额) as je,a='已收金额'
    from  收款登记表
    group by 合同编号 , 客户名称
    union all
    select 合同编号 , 客户名称,sum(开票金额) as je,a='開票金额'
    from  开出发票登记表
    group by 合同编号 , 客户名称
    union all
    select 合同编号 , 客户名称,sum(je) as  je,a='待开发票'
    from 
    (select 合同编号 , 客户名称,收款金额 as je,a='已收金额'
    from  收款登记表
    union all
    select 合同编号 , 客户名称,-开票金额 as je,a='開票金额'
    from  开出发票登记表
    ) as b) as table
    group by 合同编号 , 客户名称另外,你還可以用視圖實現,還有就是存儲過程
      

  5.   

    建议你用Report Builder做,这个组件做报表很轻易,基本不用写额外代码。