Chinaunix

标题: 请教一个SQL问题,关于按日期汇总。 [打印本页]

作者: gamesay    时间: 2006-10-11 15:22
标题: 请教一个SQL问题,关于按日期汇总。
表instock中有一日期字段insdate,其它字段有price,num等,我想按月份汇总数据,请教如何实现????
作者: blue_stone    时间: 2006-10-11 15:28
SQL> select trunc(hiredate,'MONTH') , count(*) from emp group by trunc(hiredate,'MONTH');

TRUNC(HIR   COUNT(*)
--------- ----------
01-DEC-80          1
01-SEP-81          2
01-MAY-81          1
01-APR-87          1
01-FEB-81          2
01-JAN-82          1
01-JUN-81          1
01-APR-81          1
01-NOV-81          1
01-DEC-81          2
01-MAY-87          1

11 rows selected.

trunc函数的使用语法可以在sql reference中找到
作者: gamesay    时间: 2006-10-11 15:36
哈哈,太棒了,刚才在QQ群里有高手指点用to_char没想到用这种trunc函数更方便。
作者: gamesay    时间: 2006-10-11 16:19
为什么报无效数字01722,大侠帮忙解决一下。。。
作者: blue_stone    时间: 2006-10-11 16:20
原帖由 gamesay 于 2006-10-11 16:19 发表
为什么报无效数字01722,大侠帮忙解决一下。。。


错误信息发上来看看
作者: gamesay    时间: 2006-10-11 16:25
以下是错误抓图

err.jpg (79.82 KB, 下载次数: 15)

err.jpg

作者: ketos    时间: 2006-10-11 16:47
between那写错了
and insdate between to_date('20060101','YYYY-MM-DD') and to_date('20060631','YYYY-MM-DD')

[ 本帖最后由 ketos 于 2006-10-11 16:50 编辑 ]
作者: gamesay    时间: 2006-10-11 16:59
改了后报:ORA-01861: 文字与格式字符串不匹配

可我用以下语句可以执行呀。
SELECT insdate,
sum(qinstock) as 进货数量,
sum(amountprice) as 进货金额,
sum(advgetbox(v_insitem.qinstock,v_insitem.qpacking)) AS  进货箱数,
sum(advgetret(v_insitem.qinstock,v_insitem.qpacking)) AS 进货零数
    FROM v_insitem
    WHERE mcustno = '000'
      AND insdate between '2006/01/01' and '2006/01/02'
Group By insdate;
作者: gamesay    时间: 2006-10-11 17:00
如何能够按月进行汇总呢?????
作者: blue_stone    时间: 2006-10-11 17:00
between改成
between to_date('2006/01/01','YYYY/MM/DD') and TO_DATE('2006/06/31','YYYY/MM/DD')
看看
最好把你的语句放在sqlplus中执行一下, 可以清楚的知道在那一行, 那个位置出现了ORA-01722错误
作者: gamesay    时间: 2006-10-11 17:08
已改,在SQL PLUS中执行,无反映。。。
作者: numenhuang    时间: 2006-10-11 17:12
原帖由 gamesay 于 2006-10-11 17:08 发表
已改,在SQL PLUS中执行,无反映。。。


insdate不是date类型的字段?
desc v_insitem; --->结果
show parameter nls_date_format; -->结果
作者: gamesay    时间: 2006-10-11 17:30
insdate是date类型的字段!
作者: blue_stone    时间: 2006-10-11 17:42
原帖由 gamesay 于 2006-10-11 17:08 发表
已改,在SQL PLUS中执行,无反映。。。


在sqlplus中执行没有错误提示么?
作者: numenhuang    时间: 2006-10-11 19:24
在sqlplus中执行下面的语句呢:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';

SELECT insdate,
             qinstock,
             amountprice
    FROM v_insitem
    where rownum<30;
--->取出点范例数据

测试:
SELECT trunc(insdate,'Month'),
             sum(qinstock) as 进货数量,
             sum(amountprice) as 进货金额,
   FROM v_insitem
WHERE mcustno = '000'
     AND insdate between to_date('2006/01/01','yyyy/mm/dd') and to_date('2006/01/10','yyyy/mm/dd')
    Group By trunc(insdate,'Month');
作者: gamesay    时间: 2006-10-13 16:44
已经搞清楚问题了。呵呵,原来insdate是字符型的。害各位老大浪费时间了,真是粗心,唉,下次一定注意。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2