Jump to content
josePeixoto

Agrupar dados na consulta em oracle

Recommended Posts

SELECT DISTINCT obter_nome_estabelecimento(b.cd_estabelecimento) estabelecimento,
  TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy') dia,
  initcap(b.DS_CURTA) agenda,
  tasy.obter_desc_espec_agenda(b.cd_especialidade) especialidade,
  COUNT(DISTINCT a.nm_paciente) total_pacientes,
  0 total_pacientes_atendidos
  
FROM tasy.agenda_consulta a, 
  tasy.agenda b
WHERE a.cd_agenda       = b.cd_agenda
AND b.ie_situacao       = 'A'
and trunc(a.dt_agenda) between :dt_inicial and :dt_final
and ((b.CD_ESTABELECIMENTO = :cd_estab) or (:cd_estab = 0))
AND a.nm_paciente      IS NOT NULL
AND a.IE_STATUS_AGENDA <> 'C'
and a.cd_agenda = 7216
GROUP BY TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy'),
         b.ds_curta,
         tasy.obter_desc_espec_agenda(b.cd_especialidade),
         obter_nome_estabelecimento(b.cd_estabelecimento)
HAVING COUNT(DISTINCT a.nm_paciente) > :total_paciente

union all

SELECT DISTINCT obter_nome_estabelecimento(b.cd_estabelecimento) estabelecimento,
  TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy') dia,
  initcap(b.DS_CURTA) agenda,
  tasy.obter_desc_espec_agenda(b.cd_especialidade) especialidade,
  0 atendidos,
  COUNT(DISTINCT a.nm_paciente) total_pacientes_atendidos
FROM tasy.agenda_consulta a, 
  tasy.agenda b
WHERE a.cd_agenda       = b.cd_agenda
AND b.ie_situacao       = 'A'
and trunc(a.dt_agenda) between :dt_inicial and :dt_final
and ((b.CD_ESTABELECIMENTO = :cd_estab) or (:cd_estab = 0))
AND a.nm_paciente      IS NOT NULL
AND a.IE_STATUS_AGENDA = 'E'
and a.cd_agenda = 7216
GROUP BY TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy'),
  b.ds_curta,
  tasy.obter_desc_espec_agenda(b.cd_especialidade),
  obter_nome_estabelecimento(b.cd_estabelecimento)
HAVING COUNT(DISTINCT a.nm_paciente) > :total_paciente

Está exibindo como resultado duas linhas. Como agrupar para exibir 1 linha com as colunas "total_pacientes" e "total_pacientes_atendidos"

Share this post


Link to post
Share on other sites

Boa tarde,

 

Tente assim: (Eu não fiz nenhum teste)

 

 

SELECT estabelecimento, dia, agenda, especialidade,
       sum(total_pacientes) total_pacientes,
       sum(total_pacientes_atendidos) total_pacientes_atendidos
from (
SELECT DISTINCT obter_nome_estabelecimento(b.cd_estabelecimento) estabelecimento,
  TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy') dia,
  initcap(b.DS_CURTA) agenda,
  tasy.obter_desc_espec_agenda(b.cd_especialidade) especialidade,
  COUNT(DISTINCT a.nm_paciente) total_pacientes,
  0 total_pacientes_atendidos
FROM tasy.agenda_consulta a, 
  tasy.agenda b
WHERE a.cd_agenda       = b.cd_agenda
AND b.ie_situacao       = 'A'
and trunc(a.dt_agenda) between :dt_inicial and :dt_final
and ((b.CD_ESTABELECIMENTO = :cd_estab) or (:cd_estab = 0))
AND a.nm_paciente      IS NOT NULL
AND a.IE_STATUS_AGENDA <> 'C'
and a.cd_agenda = 7216
GROUP BY TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy'),
         b.ds_curta,
         tasy.obter_desc_espec_agenda(b.cd_especialidade),
         obter_nome_estabelecimento(b.cd_estabelecimento)
HAVING COUNT(DISTINCT a.nm_paciente) > :total_paciente

union all

SELECT DISTINCT obter_nome_estabelecimento(b.cd_estabelecimento) estabelecimento,
  TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy') dia,
  initcap(b.DS_CURTA) agenda,
  tasy.obter_desc_espec_agenda(b.cd_especialidade) especialidade,
  0 atendidos,
  COUNT(DISTINCT a.nm_paciente) total_pacientes_atendidos
FROM tasy.agenda_consulta a, 
  tasy.agenda b
WHERE a.cd_agenda       = b.cd_agenda
AND b.ie_situacao       = 'A'
and trunc(a.dt_agenda) between :dt_inicial and :dt_final
and ((b.CD_ESTABELECIMENTO = :cd_estab) or (:cd_estab = 0))
AND a.nm_paciente      IS NOT NULL
AND a.IE_STATUS_AGENDA = 'E'
and a.cd_agenda = 7216
GROUP BY TO_CHAR(a.DT_AGENDA,'dd/mm/yyyy'),
  b.ds_curta,
  tasy.obter_desc_espec_agenda(b.cd_especialidade),
  obter_nome_estabelecimento(b.cd_estabelecimento)
HAVING COUNT(DISTINCT a.nm_paciente) > :total_paciente)
group by estabelecimento, dia, agenda, especialidade;
 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By johnklo
      COM BASE NA TABELA HR DO ORACLE
      Preciso criar uma sub-rotina (procedure) que imprima na tela o número de funcionários (employees) agrupados por departamentos (department_id). Deve-se ordenar a saída em ordem decrescente pela quantidade de departamentos. Pode-se utilizar qualquer forma de cursor para imprimir o resultado.
    • By Samuel Pietro
      Tenho um select em PDO e preciso que a consulta retornada vire uma variavel, mas a variavel só pega a ultima linha da tabela e eu preciso que pegue todas as linhas que existirem.
       
      $conexao = conexao::getInstance(); $sql = 'SELECT * FROM RegistroE'; $stm = $conexao->prepare($sql); $stm->execute(); $Sql = $stm->fetchAll(PDO::FETCH_OBJ); foreach ($Sql as $SqlReg): $conteudo_meio = picture_X($SqlReg->E_01,1) .picture_X($SqlReg->E_02,25) .picture_9($SqlReg->E_03,4) .picture_X($SqlReg->E_04,14) .picture_9($SqlReg->E_05,8) .picture_9($SqlReg->E_06,8) .picture_9($SqlReg->E_07,8) .picture_9($SqlReg->E_08,8) .picture_9($SqlReg->E_09,8) .complementoRegistro(96,"brancos") .picture_9($SqlReg->E_11,1) .complementoRegistro(1,"brancos") ; endforeach; Como eu poderia está fazendo isto?
    • By Anderson Campos da Silva
      Olá,
       
      Estou com um problema, que para alguns pode ser simples, é o seguinte:
       
      Tenho 2 tabela relacionadas, MODELO e EQUIPAMENTO
       
      TABELA MODELO
      idModelo (INT) - chave primária  
      txModelo (VARCHAR)
       
      TABELA EQUIPAMENTO 
      idEquipamento (INT) - chave primária   
      patrimonio (VARCHAR)
      situacao (VARCHAR)
      idModelo (INT) - Chave estrangeira
       
      O campo situação pode ser preenchido apenas apenas com PRODUÇÃO OU ESTOQUE.
       
      Enfim, preciso de um SELECT que retorne as seguintes colunas txModelo, quantidade de equipamentos por modelo, quantidade de equipamentos com PRODUÇÃO, e quantidade de equipamentos com ESTOQUE, exemplo:
       
      txModelo | total | produção | estoque
      CISCO           7            4                  3
      HP                15          10                 5
      DELL            10           2                   8
       
      Desde já agradeço
    • By EREGON
      Olá,
      ao chamar a função, estou a receber o erro:
       
      "ORA-01422: extracção exacta devolve mais que o número pedido de linhas"
       
      create or replace FUNCTION "CALC_ADDT_SIM_DISC" (ACCT_INPUT VARCHAR2) RETURN VARCHAR2 IS SIM_MSISDN VARCHAR2(20); BEGIN SELECT CASE WHEN ADDT_DISC_1 = 1 THEN mu.MSISDN WHEN ADDT_DISC_1 > 1 THEN (SELECT DISTINCT t02.MSISDN FROM CDM.DMKV_TRANSP_VAR_RESULT_02 t02 WHERE SERV_ACCT_OLDER_MSISDN_FLG = 'Y' AND PRICING_PLAN_TYPE IN ('valor1', 'valor2') AND t02.DW_SERV_ST_ID='100000003' AND t02.CUST_ACCT_EXT_KEY = ACCT_INPUT ) END MSISDN_ADDT_DISC INTO SIM_MSISDN FROM( SELECT DISTINCT CUST_ACCT_EXT_KEY, COUNT(CUST_ACCT_EXT_KEY) AS ADDT_DISC_1 FROM MOBILE_UPSELL WHERE FLAG_ADDITIONAL_SIM_DISCOUNT = '0' GROUP BY CUST_ACCT_EXT_KEY )t, MOBILE_UPSELL mu WHERE t.CUST_ACCT_EXT_KEY = mu.CUST_ACCT_EXT_KEY AND t.CUST_ACCT_EXT_KEY = ACCT_INPUT; RETURN SIM_MSISDN; END; O que estou a fazer de errado?
       
      Obrigado
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.