我做的是一个类似报表查询的程序,前台用的flex,后台用的java,db是oracle。框架什么的写好了,现在经理的需求是根据输入的时间进行查询。其中输入时间年月日是三选一的,比如,我选择2010年至2011年,日期就不用选了,同理,我选择月,即为输入时间为2011年4月至2011年5月,点击查询在一张datagrid表里面显示出来,显示的数据包含选择的时间区间里的时间,以及求和的数据。如何写select语句进行求和,而且是分时间求和,比如选择只输入年份,查询2011年的数据,就在datagrid里面列出每个月的数据,一列日期,一列sum的数据。求各位大神帮帮小弟,小弟菜鸟

解决方案 »

  1.   

    decode(lengthb(:as_rq),4,按年,6,按年月,按年月日)
      

  2.   

    现在前台的数据被我格式化成14位的char型了,db里面的时间也是精确到14位的char
    按照长度来算似乎不行吧
      

  3.   

    select to_char(sysdate, 'YYYYMM') 月份,sum(列)
      FROM DUAL
     GROUP BY to_char(sysdate, 'YYYYMM')
      

  4.   

    如果只输入年份,比如2011年,你格式化的14位的char型的结果是什么?
    在用户查询时就需要判断出用户选择的是年月日的哪种类型的查询,然后再生成相应的时间条件去查询!
    select to_char(date_columnName , 'YYYYMM') 月份,sum(列)
    FROM TableName 
    where date_columnName >= to_date(date_From,'YYYYMM')
        and date_columnName < to_date(date_To,'YYYYMM')
    GROUP BY to_char(date_columnName , 'YYYYMM');