选择按计数乘法SQL,Group By,Oracle

时间:2018-12-26 03:24:23

标签: oracle group-by count multiplication

我有这张桌子。...

TableHead tblHead
 - Date schedule
 - Number idCode

Date       idCode
2018/05/12 10007
2018/05/15 10008
2018/09/18 19892
2018/11/20 19897
2018/05/15 23404

TableDetail tblDetail
 - Number headCode
 - Varchar2 superService

headCode superService
10007    S67900
10008    S89333
10008    S89335
19892    A45899
19892    P41899
19897    A89320
23404    S89333
23404    P41899

TableInternal
 - Varchar2 superService
 - Varchar2 nameService
 - Number(15,2) quantity

superService  nameService  quantity
S89333        1000045677   2.1
S89335        3002344444   0.7
P41899        1000045677   5.6
P41899        2000045679   4.3

TableHead表具有一个“日期”字段,而TableDetail具有对其idCode的外键。 现在TableDetail有一个名称为superService的Service字段,如软件包。

该包由TableInternal表描述,带有quantity字段,并包含nameService字段。

换句话说... superService字段包含quantitynameService

我想获取findByDate=2018/05/15示例,然后必须处理10008中的代码23404TableHead

现在,1008代码具有S89333S89335,而23404具有S89333P41899

继续,我需要处理两次S89333,一次处理S89335P41899

现在,要进行详细服务...

nameService   schedule    Total
1000045677    2018/05/15  2*2.1 + 5.6
3002344444    2018/05/15  0.7
2000045679    2018/05/15  4.3  

我的查询不正确...但是,我不知道该怎么做

SELECT 
tblInt.nameService, TO_DATE(TO_CHAR(tblHead.schedule,'dd/MM/yy')), COUNT (*) subTotal
FROM TableDetail tblDetail,  TableHead tblHead, TableInternal tblInt
WHERE tblHead.idCode = tblDetail.headCode
AND tblDetail.superService = tblInt.superService
AND TO_CHAR(tblHead.schedule,'dd/MM/yy') =:findByDate
GROUP BY 
tblInt.nameService, TO_CHAR(tblHead.schedule,'dd/MM/yy')
ORDER BY TO_DATE(TO_CHAR(tblHead.schedule,'dd/MM/yy')) DESC;

现在,我想在同一查询中获得一个Total字段,其值为subTotal * tblInt.quantity

但是,我不知道该怎么做。

我的问题 如何将计数乘以另一个数字字段(使用分组依据)?

1 个答案:

答案 0 :(得分:0)

如果我没做错任何事情,您只需要将所有内容合并在一起,将其归类即可。您不需要乘以一个计数,因为这是隐式完成的。各自(超级?)服务(我没有得到实体)的行在未分组的集中出现两次。当然是2.1 + 2.1 = 2 * 2.1。

SELECT i.nameservice,
       h.schedule,
       sum(i.quantity) total
       FROM tablehead h
            INNER JOIN tabledetail d
                       ON d.headcode = h.idcode
            INNER JOIN tableinternal i
                       ON i.superservice = d.superservice
       WHERE h.schedule = to_date('2018-05-15', 'YYYY-MM-DD')
       GROUP BY i.nameservice,
                h.schedule;

db<>fiddle