用PL/SQL写。调用其中的UTL_FILE包。我现在正在生成和你类似的报表呢:)

解决方案 »

  1.   

    如果你有2000个customer,那怎么办?有这么大的报表纸吗?
      

  2.   

    这是一个交叉表的查询,在access中通过一个sql语句就可以做,在oracle中好象是不可以的,必须通过pl/sql块来实现
      

  3.   

    另外有个custom表  ,结构如下
        customid   varchar2(10) ,
        customname varchar2(50) ,需要在procedure里实现上述功能 ,急!
      

  4.   

    select goodsid,sum(decode(customid,1,counts,0)) custom1,
                   sum(decode(customid,2,counts,0)) custom2,
                   sum(decode(customid,3,counts,0)) custom3,
                   sum(decode(customid,4,counts,0)) custom4,
                   sum(decode(customid,5,counts,0)) custom5,
                   sum(decode(customid,6,counts,0)) custom6,
                   sum(decode(customid,7,counts,0)) custom7,
                   sum(decode(customid,8,counts,0)) custom8,
                   sum(decode(customid,9,counts,0)) custom9
    from (
    select goodsid,customid,sum(counts)
    from tname
    group by goodsid,customid
          )
    group by goodsid
      

  5.   

    PL/SQL写,在过程里先建一个临时表,表结构和你的报表一样,然后插入所有GOODSID的空记录,然后用客户ID循环,UPDATE 这个表就可以了。
      

  6.   

    好象也只能DECODE了,如果你用PB可以利用PB的交叉表DATAWINDOW生成
      

  7.   

    我用的是Delphi + FastReport
      

  8.   

    很多报表工具都提供旋转表的功能,称为pivot或者cross-table如果列的数量是固定的,那用decode完成不难,如楼上提供的写法
    但是如果列数不定,那就只能用动态sql来写,其实就是拼接sql字符串,通过几个步骤完成:
    1、select distinct CustomID from ... where ...; 或者所有的CustomID
    2、对customid循环拼接出如上的decode语句
    3、执行动态的语句
      

  9.   

    不好意思,我没做过这样格式的报表,但是对于:
    GoodsID  
    CustomID1  
    CustomID2 
    CustomID3 
    .
    .
    CustomID   
     这样的可以,正如三千说的要是你的 客户  ID 很多的话,你也没有那样的纸
    一下子打印出来,所以建议采用我那样的格式。
    我的格式只要加个 qreport 和query 就可以完成。
    具体的 sql 语句为:
     select GoodsID ,  CustomID , sum(CustomID) from table group by
     GoodsID ,  CustomID  having  条件
     
    PS: 我这样的方法也只能对于GoodsID 数目确定好用。要是数目不确定,不想建临时表的话,你在统计前先查询表中当前有多少GoodsID ,再实时生成字段 text。
       
      

  10.   

    好像不能动态的实现阿!如果CustomID的值很少或者固定的,用DECODE 和  zhoubf725的语句都可以.