Oracle SQL组无法正常工作

Oracle SQL组无法正常工作,sql,oracle,count,group-by,Sql,Oracle,Count,Group By,我正在运行一个查询,以返回每周已完成作业的数量计数,根据单独的财务期间表将周细分为4周,但该查询未返回正确的计数 以下是代码示例: select (SELECT (fp.financialperiod || ' week ' || ceil(floor((wo.actfinish - p.periodstart+1))/7)) FROM maximo.financialperiods fp WHERE TRUNC (wo.actfinish) BETWEEN fp.

我正在运行一个查询,以返回每周已完成作业的数量计数,根据单独的财务期间表将周细分为4周,但该查询未返回正确的计数

以下是代码示例:

select (SELECT (fp.financialperiod || ' week ' ||
ceil(floor((wo.actfinish - p.periodstart+1))/7))
        FROM maximo.financialperiods fp
       WHERE TRUNC (wo.actfinish) BETWEEN fp.periodstart
                                      AND fp.periodend) fin_period,
wo.wo8 as assetgroup,
Count(wo.wonum)
from maximo.workorder wo
where (TRUNC (wo.actfinish) BETWEEN TO_DATE (:startdate, 'DD/MM/YYYY')
                                    AND TO_DATE (:enddate, 'DD/MM/YYYY'))
group by wo.actfinish,
wo.wo8

我怀疑原因是您需要按第一列进行聚合。根据查询的结构,使用子查询最容易做到这一点:

select fin_period, wo.wo8, count(wo.wonum) as cnt
from (select (SELECT (fp.financialperiod || ' week ' || ceil(floor((wo.actfinish -    p.periodstart+1))/7))
              FROM maximo.financialperiods fp
              WHERE TRUNC (wo.actfinish) BETWEEN fp.periodstart AND fp.periodend
             ) as fin_period,
             wo.wo8 as assetgroup, wo.wonum
      from maximo.workorder wo
      where TRUNC(wo.actfinish) BETWEEN TO_DATE (:startdate, 'DD/MM/YYYY')
                                    AND TO_DATE (:enddate, 'DD/MM/YYYY')
     ) t
group by fin_period, wo.wo8;

请给出一些示例数据和一些示例结果,解释为什么这些结果不是您想要/期望的结果。这不起作用,因为fp.financialperiod是子查询中的对象,而不是主查询
select fin_period, wo.wo8, count(wo.wonum) as cnt
from (select (SELECT (fp.financialperiod || ' week ' || ceil(floor((wo.actfinish -    p.periodstart+1))/7))
              FROM maximo.financialperiods fp
              WHERE TRUNC (wo.actfinish) BETWEEN fp.periodstart AND fp.periodend
             ) as fin_period,
             wo.wo8 as assetgroup, wo.wonum
      from maximo.workorder wo
      where TRUNC(wo.actfinish) BETWEEN TO_DATE (:startdate, 'DD/MM/YYYY')
                                    AND TO_DATE (:enddate, 'DD/MM/YYYY')
     ) t
group by fin_period, wo.wo8;