Select 乘以计数 SQL、Group By、Oracle

Select multiplication by count SQL, Group By, Oracle

我有这个 tables....

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 table 有一个日期字段,TableDetail 有一个外键到它的idCode。 现在 TableDetail 有一个名为 superService 的服务字段,就像一个包。

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

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

我想获取示例findByDate=2018/05/15,那么必须处理来自TableHead的代码1000823404 .

现在,1008代码有S89333S8933523404S89333P41899

恢复,我需要处理两次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;

现在我想在同一个查询中获取一个值为 subTotal * tblInt.quantityTotal 字段。

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

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

如果我没有弄错任何东西,你只需要把所有的东西加在一起,分组,你就得到了你的总和。您不需要乘以计数,因为这是隐式完成的。相应(超级?)服务(我没有得到实体)的行在未分组的集中出现两次。当然还有 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