这该不简单吗!SELECT 操作员代码,
操作员姓名,
a.事件代码 事件代码,
事件名称,
a.a1 发生次数,
a.a2 发生额
FROM
(SELECT 操作员代码, 操作员姓名,事件代码,sign(发生额),SUM(发生次数) a1 ,SUM(发生额) a2
FROM MyTable
GROUP BY 操作员代码, 操作员姓名,事件代码,sign(发生额)) a,
Trcd b
WHERE a.事件代码=b.事件代码;
操作员姓名,
a.事件代码 事件代码,
事件名称,
a.a1 发生次数,
a.a2 发生额
FROM
(SELECT 操作员代码, 操作员姓名,事件代码,sign(发生额),SUM(发生次数) a1 ,SUM(发生额) a2
FROM MyTable
GROUP BY 操作员代码, 操作员姓名,事件代码,sign(发生额)) a,
Trcd b
WHERE a.事件代码=b.事件代码;
from mytable m group by 操作员姓名,事件代码,sign(发生额)
select min(操作员代码),操作员姓名,事件代码,min(事件名称),sum(发生次数),sum(发生额)
from mytable,trcd where mytable.事件代码 = trcd.事件代码(+) group by 操作员姓名,事件代码;
---------- --------- --------- ---------
a 1 11 111
a 1 22 222
b 2 33 333
b 2 44 333
SQL> select * from tbb; ID IDNAME
--------- ----------
1 name1
2 name2
SQL> SELECT min(name),sum(times),sum(num),min(idname) FROM taa,tbb
2 where taa.id=tbb.id(+)
3 group by name,taa.id;MIN(NAME) SUM(TIMES) SUM(NUM) MIN(IDNAME
---------- ---------- --------- ----------
a 33 333 name1
b 77 666 name2随便建了两个表测试
你的代码和hrb_qiuyb(大森林)的代码我都试了,完全可以
我还想问一下,你用min函数是不是就是为了不让“操作员代码”字段出现在group by中?还有其他作用吗?
from mytable,trcd where mytable.事件代码 = trcd.事件代码(+) group by 操作员姓名,事件代码,事件名称这样才对,事件名称也许要group by
操作员代码 操作员姓名 事件代码 事件名称 发生次数 发生额
001 张三 61 补助 7 110
001 张三 61 扣款 10 -130
相同的操作员代码,事件代码不同的事件名称。
from mytable,trcd where mytable.事件代码 = trcd.事件代码(+) group by 操作员代码,操作员姓名,事件代码,事件名称
from mytable,trcd where mytable.事件代码 = trcd.事件代码 group by 操作员代码,操作员姓名,事件代码,事件名称
对的,这两个MIN主要对应group by的限制的。
对于min(操作员代码),你可以不用min,而直接放到group by 后面。至于放到group by 后面好还是用min()好,我也不太清楚,还请知道兄弟们解释一下;
但是min(select 事件名称 from trcd t where t.事件代码 = m.事件代码)就必须用了,因为group by后面不能用子查询的