最近遇到一个问题不知道怎么解决,如下:
页面上有三个参数:省份,开始时间,结束时间
!。要求查询出来的结果的横轴是开始时间和结束时间内的每天的信息
2,根据不同的省份列要求显示省下面所有的市的信息,
简而言之就是查询出来的结果在显示出来的时候栏位和列都是动态产生的,在存储过程中应该如何处理,高手给点思路吧,

解决方案 »

  1.   

    大哥能否给点思路了,用动态sql怎么处理了??
      

  2.   

    设计的时候两张表。
    select b.城市, from 信息表 a,城市表 b,(select from XX connect by ..作用是把日期给罗列出来的)c
     where b.城市跟城市跟a.城市id对应,b日期跟后面的日期对应。。group
    by 城市
    大体就是这样子吧。
      

  3.   

    用decode函数处理,你可以去参考行转列就可以了,至于列就是你说天随便举一例子供你参考SELECT a.card_code,
           SUM(decode(a.q, 1, a.bal, 0)) q1,
           SUM(decode(a.q, 2, a.bal, 0)) q2,
           SUM(decode(a.q, 3, a.bal, 0)) q3,
           SUM(decode(a.q, 4, a.bal, 0)) q4
      FROM t_change_lc a
     GROUP BY a.card_code
      

  4.   

    你那说的 省份相当于是固定的,只去decode 天数的列就可以达到你想要的
      

  5.   

    不是固定的呢,选择不同的省份出来的栏位都是不一样的啊,你无法事先获悉user选择的哪个省份,也就是你在Procedure中必须先通过省把对应的市全部抓出来,然后把市作为每个rows的第一个栏位,在后面的天中所显示的是对那个市的特定天数的信息的汇总,也就是做进一步查询的时候要将前面查询的结果作为变量传进去,我写一下我大致的思路和遇到的困难吧用一个cursor存储页面选择的省对应的市的信息然后汇总的时候
    sql:="select 
    sum(市=cursor.某个值 and day='时间')"
    open p_ds for ssql,在sql中要跑一个循环来确定你到底要select多少栏位
    直接在里面又不能写循环,目前遇到的问题就是在这里
      

  6.   

    其实这个很简单的 根据地市分组统计 然后使用decode函数就ok 不过在前面写个时间拆分函数 
    使用方法: 循环
    实现起来不难 这是思路
      

  7.   

    谢谢大家的关心,最后写了一支ETL,将汇总的信息什么的做了一个新的table,问题迎刃而解,谢谢大家的帮助