我需要将所有IN
子句中的值传递给列中的subselect
。
SELECT distinct
'Atendimentos' Tipo,
to_char(A.DT_ATENDIMENTO, 'mm/yyyy') Competencia,
pre.cd_prestador,
se.cd_setor,
se.nm_setor,
(
select (count(distinct a2.cd_atendimento)) --* 0.3
from atendime a2
INNER JOIN PRESTADOR Pre2 ON A2.CD_PRESTADOR =
Pre2.CD_PRESTADOR
left join setor se2 on se2.CD_SETOR =
a2.cd_setor
where to_char(a2.DT_ATENDIMENTO, 'mm/yyyy') =
to_char(a.DT_ATENDIMENTO, 'mm/yyyy')
and pre2.cd_prestador = pre.cd_prestador --Aqui é o problema
and se2.cd_setor = se.cd_setor
group by to_char(A.DT_ATENDIMENTO, 'mm/yyyy')
) total
FROM ATENDIME A
INNER JOIN PRESTADOR Pre ON A.CD_PRESTADOR = Pre.CD_PRESTADOR
left join setor se on se.CD_SETOR = a.CD_SETOR
WHERE to_char(A.DT_ATENDIMENTO, 'mm/yyyy') = '08/2018'
and pre.cd_prestador in (127,3921,1704,28,5048,3118,130,3336,2171,1869,128,132,186)
order by se.cd_setor
我需要最后一栏来给我带来总的通话次数。
在子选择WHERE
(别名为"total"
的列中)中,我比较了具有外部选择能力的能力和具有外部选择扇区的能力。
到目前为止,一切正常。
问题出在列prestador
上,即使只有一列,也只能保持在那一列。
但是,我需要与外部选择的IN
子句中传递的所有值进行比较。
答案 0 :(得分:1)
我知道子查询用于计算整个结果集的总数。如果是这样,那么这看起来像是窗口函数的典型用例。
我怀疑您的子查询可以仅由window函数代替,如下所示:
SELECT distinct
'Atendimentos' Tipo,
to_char(A.DT_ATENDIMENTO, 'mm/yyyy') Competencia,
pre.cd_prestador,
se.cd_setor,
se.nm_setor,
count(distinct a2.cd_atendimento) over() total
FROM ATENDIME A
INNER JOIN PRESTADOR Pre ON A.CD_PRESTADOR = Pre.CD_PRESTADOR
left join setor se on se.CD_SETOR = a.CD_SETOR
where to_char(A.DT_ATENDIMENTO, 'mm/yyyy') = '08/2018'
and pre.cd_prestador in (127,3921,1704,28,5048,3118,130,3336,2171,1869,128,132,186)
order by se.cd_setor