USERID ORDERID TONS
u001 o001 20
u001 o002 40
u001 o003 45
u002 o005 20
.... .... ..类似有这样的表,如何查出每个用户TONS(只有三种,如上例)20的单有多少,40的多少,45的多少.
然后所有20的多少,40的多少,45的多少.
要求在Oracle Discover里查出,一次查询显示出来.
只是现在我的分类总计查不出.请大家帮忙,一早来就有人在催了.
u001 o001 20
u001 o002 40
u001 o003 45
u002 o005 20
.... .... ..类似有这样的表,如何查出每个用户TONS(只有三种,如上例)20的单有多少,40的多少,45的多少.
然后所有20的多少,40的多少,45的多少.
要求在Oracle Discover里查出,一次查询显示出来.
只是现在我的分类总计查不出.请大家帮忙,一早来就有人在催了.
解决方案 »
- 新人求助!PLSQL游标问题
- 这个SQL怎么理解?
- oracle关于null与时间大小比较之后结果的郁闷问题。兄弟姐妹们帮忙呀。。
- 写了一个oracle 函数,带到sql查询里面,速度很慢,不知何故,求高人解答
- orcale怎么用临时表
- 将Mysql中的一数据库转到Oracle中,写blob字段时出现的问题。
- 求一个select sql ~~~~~~~~~~~~~~~
- 如何在bolb字段中输出图片格式文件
- PL/SQL自动关闭SESSION,但是调试工具显示还在调试
- 存储过程中where语句部分是否能实现关系运算
- ARC0: media recovery disabled ???
- 关于oracle中的自动列号如何调用,请教各位前辈?
SQL> select * from b;USERID ORDERID TONS
-------------------- -------------------- ----------
u001 o001 20
u001 o002 40
u001 o003 45
u002 o004 40
u002 o005 45
u003 o006 206 rows selectedSQL>
SQL> SELECT decode(grouping(userid),1,'总计',userid) userid,
2 SUM(decode(tons, 20, 1, 0)) cnt20,
3 SUM(decode(tons, 40, 1, 0)) cnt40,
4 SUM(decode(tons, 45, 1, 0)) cnt45
5 FROM b
6 GROUP BY ROLLUP(userid)
7 /USERID CNT20 CNT40 CNT45
-------------------- ---------- ---------- ----------
u001 1 1 1
u002 0 1 1
u003 1 0 0
总计 2 2 2
老大,你给的在我的机器不行
我用的是oracle discover
版本9i的,你在sql&plus下的grouping在我的工具下不可用
报语法错误,说在EUL中找不到或是没注册.应该如何做下一步?
SELECT nvl(userid,'总计') userid,
SUM(decode(tons, 20, 1, 0)) cnt20,
SUM(decode(tons, 40, 1, 0)) cnt40,
SUM(decode(tons, 45, 1, 0)) cnt45
FROM b
GROUP BY ROLLUP(userid)会不会不支持rollup?
SUM(decode(tons, 20, 1, 0)) cnt20,
SUM(decode(tons, 40, 1, 0)) cnt40,
SUM(decode(tons, 45, 1, 0)) cnt45
FROM b
GROUP BY userid
UNION ALL
SELECT NULL AS userid,
SUM(decode(tons, 20, 1, 0)) cnt20,
SUM(decode(tons, 40, 1, 0)) cnt40,
SUM(decode(tons, 45, 1, 0)) cnt45
FROM b
这可如何是好呢?
SELECT CNTR.CNTRID,CNTR.CUSTORDNO,CNTR.CNTRSIZE,
CTMSAMRD_PRDN.REVSTR(CNTR.CNTRNO),
CNTR.CNTRNO,
SUM(decode(CNTR.CNTRSIZE,20,1,0)) Ctrn20,
SUM(decode(CNTR.CNTRSIZE,40,1,0)) Ctrn40,
SUM(decode(CNTR.CNTRSIZE,45,1,0)) Ctrn45,
CNTR.CUSTID, CNTRIMP.CNTRID, CNTRIMP.ETA,
CNTRIMP.DISVSL, CNTRIMP.DVOYNO
FROM
CTMSAMRD_PRDN.CNTR CNTR, CTMSAMRD_PRDN.CNTRIMP CNTRIMP
WHERE
( ( CNTR.CNTRID = CNTRIMP.CNTRID ) )
AND
( CNTRIMP.ETA <= :"ToDate" )
AND
( CNTRIMP.ETA >= :"FromDate" )
AND
( CNTR.CUSTID IN ('MEI001','MAC02') )
Group by
CNTR.CUSTID,CNTR.CNTRSIZE
Order by
CNTR.CUSTORDNO
;
强倒是强大,就是一大本书,全英文的.急用的时候才知E文的用处呵.
我这边不急,倒是做报表的女生急啦.
本人水平有限,所以只能一边找,一边问了.谢谢大家的回复,也请大家再想下,union all 现在还在试,也有报错,而且是报列数,但是却又不统计的,还要自己第行列数去加了去估计......
--CNTR.CUSTORDNO,
CNTR.CNTRSIZE,
--CTMSAMRD_PRDN.REVSTR(CNTR.CNTRNO),
--CNTR.CNTRNO,
SUM(decode(CNTR.CNTRSIZE,20,1,0)) Ctrn20,
SUM(decode(CNTR.CNTRSIZE,40,1,0)) Ctrn40,
SUM(decode(CNTR.CNTRSIZE,45,1,0)) Ctrn45,
CNTR.CUSTID,
--CNTRIMP.CNTRID,
--CNTRIMP.ETA,
--CNTRIMP.DISVSL,
--CNTRIMP.DVOYNO
FROM
CTMSAMRD_PRDN.CNTR CNTR, CTMSAMRD_PRDN.CNTRIMP CNTRIMP
WHERE
( ( CNTR.CNTRID = CNTRIMP.CNTRID ) )
AND
( CNTRIMP.ETA <= :"ToDate" )
AND
( CNTRIMP.ETA >= :"FromDate" )
AND
( CNTR.CUSTID IN ('MEI001','MAC02') )
Group by
CNTR.CUSTID,CNTR.CNTRSIZE
Order by
CNTR.CUSTORDNO
;你只按CNTR.CUSTID,CNTR.CNTRSIZE这2个字段分组,怎么查询的时候多出那么多字段,上面注释掉的字段都有问题,应该用聚集函数获取这些字段的值吧
就是先找出来,
然后工具里面有一个totals.算出来的.也是MM找出来的,工具嘛,实用就行
呵呵,可以放心吃中饭啦谢谢大家!
你说得有道理,我也是个新手:),学习...不过看了下成功的工具生成的源代码:
GROUP BY
CTMSAMRD_PRDN.REVSTR(CNTR.CNTRNO),
CNTR.CNTRID, CNTR.CUSTORDNO, CNTR.CNTRSIZE,
CNTR.CUSTID, CNTRIMP.CNTRID, CNTRIMP.ETA, CNTRIMP.DISVSL, CNTRIMP.DVOYNO
ORDER BY CNTR.CUSTORDNO ASC
确实我写的有些问题.还有就是其实我事先也没去搞清楚这些关系.:)
但还是没有一步到位的查出你在SQL&PLUS中的效果,totals是自己在工具中加的.
勉强得很,也在想怎么一步到位.
谢谢你啦 duanzilin.
compute sum of cnt20 on report
compute sum of cnt40 on report
compute sum of cnt45 on reportselect d.userid,nvl(a.cnt20,0) cnt20,
nvl(b.cnt40,0) cnt40,
nvl(c.cnt45,0) cnt45
from
(select userid,count(*) cnt20 from table
group by userid where tons = 20) a,
(select userid,count(*) cnt40 from table
group by userid where tons = 40) b,
(select userid,count(*) cnt45 from table
group by userid where tons = 45) c,
select distinct userid from table d
where d.userid = a.userid(+)
and d.userid = b.userid(+)
and d.userid = c.userid(+)