我有两张桌子:
表R5EVENTS:
EVT_CODE EVT_JOBTYPE EVT_UDFCHAR05
1 A 1111
2 B 2222
3 A 3333
4 C 4444
表R5BOOKEDHOURS:
BOO_EVENT BOO_HOURS BOO_PERSON
1 2 ADG
1 5 POL
1 1 TAD
2 3 POL
2 4 TAD
3 2 ADG
3 5 POL
4 1 TAD
4 2 POL
4 3 ADG
当我运行此查询时:
select
EVT_JOBTYPE, COUNT (EVT_CODE), SUM(BOO_HOURS)
from
R5BOOKEDHOURS
inner join
R5EVENTS on EVT_CODE = BOO_EVENT
where
BOO_PERSON is not null
group by
EVT_JOBTYPE
我明白了:
EVT_JOBTYPE COUNT(EVT_CODE) SUM(BOO_HOURS)
A 5 15
B 2 7
C 3 6
我需要的是COUNT(EVT_CODE)只计算工作订单R5EVENTS上的代码,而不是来自R5BOOKEDHOURS,因为每次工作注册一小时就会重复EVT_CODE / BOO_EVENTS。
我想得到:
EVT_JOBTYPE COUNT(EVT_CODE) SUM(BOO_HOURS)
A 2 15
B 1 7
C 1 6
UPDATE(上面的表格):
我有另一张价格为R5ORDERLINES的表(R5ORDERLINES.ORL_ORDER = R5EVENTS.EVT_UDFCHAR05)
ORL_PART ORL_ORDQTY ORL_PRICE ORL_ORDER
AA 5 100 1111
BB 2 500 2222
CC 1 200 3333
DD 10 2000 4444
我需要获得与一个EVT_ORDER相对应的所有ORL_PRICES的SUM,由EVT_JOBTYPE同时分组,就像我们在第一个查询中一样。
结果:
EVT_JOBTYPE COUNT(EVT_CODE) SUM(BOO_HOURS) ORL_PRICE
A 2 15 300
B 1 7 500
C 1 6 2000
答案 0 :(得分:1)
你可以这样做:
select EVT_JOBTYPE,
count(EVT_CODE),
sum(SumBOO_HOURS)
from
(
select EVT_JOBTYPE,
EVT_CODE,
SUM(BOO_HOURS) as SumBOO_HOURS
from R5BOOKEDHOURS inner join R5EVENTS on EVT_CODE = BOO_EVENT
where bh.BOO_PERSON is not null
group by EVT_JOBTYPE,
EVT_CODE
) PreGroupedData
group by EVT_JOBTYPE
答案 1 :(得分:0)
您需要有两个不同的数据组才能加入,以实现这一目标。一个简单的方法是:
select e.EVT_JOBTYPE, MAX(EVT_CODE_COUNT) AS EVT_CODE_COUNT, SUM(BOO_HOURS)
from R5BOOKEDHOURS bh
inner join R5EVENTS e on e.EVT_CODE = bh.BOO_EVENT
inner join (SELECT EVT_JOBTYPE, COUNT(*) AS EVT_CODE_COUNT FROM R5EVENTS GROUP BY EVT_JOBTYPE) temp on temp.EVT_JOBTYPE = e.EVT_JOBTYPE
where bh.BOO_PERSON is not null
group by e.EVT_JOBTYPE
更好的优化方法是首先创建一个#temp表,然后点击加入它。