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 guilherme_soi
      Ao acessar o meu aplicativo recebo a seguinte mensagem: 'the dbname and launch parameters must be specified on first run' como resolver?
       
      Ao acessar o meu aplicativo recebo a seguinte mensagem: 'the dbname and launch parameters must be specified on first run' como resolver? Existe algo que possa ser feito?
    • By RafaGomes
      Boa tarde, seria possível realizar uma consulta da seguinte forma:
      SELECT * FROM CARGA WHERE (CASE WHEN :VARIAVEL = 2 THEN ('2', '7') WHEN :VARIAVEL = 3 THEN ('3', '9', '10') WHEN :VARIAVEL = 4 THEN '4' WHEN :VARIAVEL = 5 THEN '5' WHEN :VARIAVEL = 6 THEN '6' END) IN AD_DIAENTREGA;  
    • By asacap1000
      Galera estou com uma dúvida, tenho a parte de envio de dados para em Post, com encode json e curl. Já pesquisei em todos os lugares e não encontrei nada pra clarear as idéias.
       
      a parte final é essa do envio (cliente)
      header("Content-Type: ".$mediaType); $headers = array(); $headers[] = "Accept: ".$mediaType; $headers[] = "Accept-Charset: ".$charSet; $headers[] = "Accept-Encoding: ".$mediaType; $headers[] = "Content-Type: ".$mediaType.";charset=".$charSet; $headers[] = "Authorization: Basic ".$AuthorizationHeaderBase64; $ch = curl_init(); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS,"contatos=$contatos"); #campos que serão enviados curl_setopt($ch, CURLOPT_USERPWD, $AuthorizationHeaderBase64); curl_setopt($ch, CURLOPT_HEADER, $headers); curl_setopt($ch, CURLINFO_HTTP_CODE, true); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);#ativa se for ter retorno do chamada $result = curl_exec($ch); $result2 = json_decode($result,true); curl_close($ch); if($result2 === false) { $err = 'Curl error: ' . curl_error($ch); $result2 = $err; echo "This is text".$err; } var_dump ($result2);  
      Preciso de ajuda para entender como deve ser feito a página que será chamada, no caso lado servidor.
       
      Como pode ver tenho um header configurado e será enviado com chave de autorização agora como isso é feito do lado servidor??
       
      Se alguém puder me ajudar, preciso entregar este webservice sexta feira 18/10. Todos os dados recebidos serão salvos no BD Oracle.
       
       
    • By wandoh
      Boa Tarde! estou com um dificuldades de puxar os dados do usuário logado no site. Atualmente estou conseguindo puxar somente o NOME, quando tento puxar o restante da erro! Abaixo segue o Código.
       
      session_start(); //inicializa variaveis $id = "accountid"; $name = ""; $email = ""; $errors = array(); //conexão db $db = mysqli_connect('localhost', 'root', 'senha', 'db') or die("could not connect to database"); //Registrar usuário if (isset($_POST['reg_user'])) { // receives all input values from the form $name = mysqli_real_escape_string($db, $_POST['name']); $email = mysqli_real_escape_string($db, $_POST['email']); $password = mysqli_real_escape_string($db, $_POST['password']); $password2 = mysqli_real_escape_string($db, $_POST['password2']); //form validação: ensure that the form is correctly filled ... // by adding (array_push)) corresponding error unto $errors array if(empty($name)) { array_push($errors, " "); } if(empty($email)) { array_push($errors, " "); } if(empty($pwd)) { array_push($errors, " "); } if($pwd != $pw2) { array_push($errors, " "); } // To protect MySQL injection (more detail about MySQL injection) $name = stripslashes($name); $password = stripslashes($password); // first check the databese to make sure // verifica na db se a usuário existente com o mesmo nome de usuário e email $user_check_query = "SELECT * FROM t_account WHERE name='$name' or email='$email' LIMIT 1"; $result = mysqli_query($db, $user_check_query); $user = mysqli_fetch_assoc($result); if($user) { // if user existente if ($user['name'] === $name) { array_push($errors, " "); } if ($user['email'] === $email) { array_push($errors, " "); } } // Registra o usuário se não haver erros if (count($errors) == 0 ) { $pwd = md5($pwd); print $pwd; $query = "INSERT INTO t_account (name, email, pwd, pw2) VALUES ('$name', '$email', '$password', '$password2')"; mysqli_query($db, $query); $_SESSION['accountid'] = $id;// $_SESSION['name'] = $name; $_SESSION['success'] = 'Você está logado em'; echo " "; //header('location: index.php'); } } //LOGIN USER if (isset($_POST['login_user'])) { $name = mysqli_real_escape_string($db, $_POST['name']); $password = mysqli_real_escape_string($db, $_POST['password']); if (empty($name)) { array_push($errors, " "); } if (empty($password)) { array_push($errors, " "); } if (count($errors) == 0 ) { $pwd = md5($pwd); $query = "SELECT 'email' FROM t_account WHERE name='$name' AND password='$password'"; $results = mysqli_query($db, $query); if (mysqli_num_rows($results)) { $_SESSION['accountid'] = $id;// $_SESSION['name'] = $name; $_SESSION['success'] = 'Você está logado em'; echo " "; //header('location: index.php'); }else{ array_push($errors, " "); } } } Com a variável abaixo, é exibido o nome de quem esta logado.
      $_SESSION["name"] Já com os demais, não e exibido o resultado é apresentado uma msg de erro.
      $_SESSION["email"] Notice: Undefined index: email in Passei em todos os post que tem sobre o assunto, mas infelizmente em meu código não deu certo.
       Sou novo em PHP!
      Preciso puxar todos os dados cadastrado do usuário.
    • By Erika Fragoso
      Boa tarde 
       
      Estou com problema para fechar a a conexão do UTL_SMTP. 
      Quando executo a procedure mais de uma vez,  apresenta erro:  "too many open connections".
       
      Exemplo:
       
      Se executo esse bloco inteiro ele apresenta o erro a seguir:
       
      EXEC ATUALIZACAO(382002, 73, 356.000, 371.900);
      EXEC ATUALIZACAO(382003, 73, 373.600, 386.900);
      EXEC ATUALIZACAO(382004, 73, 389.600, 399.400);
      EXEC ATUALIZACAO(382005, 73, 117.500, 128.200);
      EXEC ATUALIZACAO(382006, 73, 130.900, 138.800);
      EXEC ATUALIZACAO(382007, 73, 146.600, 157.000);
       
       
      ------------ERRO---------------
      0678. 00000 -  "too many open connections"
      *Cause:    An attempt to open a connection failed because too many
                 are already open by this session. The number of allowed
                 connections varies as some may be in use through other
                 components which share the same pool of allowed connections.
      *Action:   Retry after closing some other connection. The number of
                 connections supported is currently not adjustable.
       
      Agora se executo um por um não da erro. A impressão que tenho é que não esta fechando a conexão do UTL_SMTP.
      Ja tentei utilizar o  UTL_SMTP.QUIT e o   UTL_SMTP.CLOSE_CONNECTION  dentro e fora do loop , mas não funcionou.
       
       
      Alguém tem alguma dica do que pode ser feito ?
       
      Segue a procedure :
       
      --Enviar o E-Mail
        IF bEnviaMail then    --(StrDscMsg is not NULL) THEN
          StrCabMail := 'VERSAO : '||p_Versao ||' DIV: '||p_Division ||crlf||crlf||
                        'ID Anti  Novo ID  KM Ini  KM Fim  Lin  Vel  Tipo  H_Ini  H_Fim Motivo  ';
          StrDscMsg  :=  StrCabMail ||crlf|| StrDscMsg;
          
           connmail   := UTL_SMTP.OPEN_CONNECTION('smtp',25);

            FOR RegEmail IN(
                             SELECT MR_MAIL
                               FROM MAIL_REFRESH
                              WHERE MR_GRUPO = 1
                           ) LOOP
                               
           BEGIN
                       ----connmail   := UTL_SMTP.OPEN_CONNECTION('smtp',25);

                      StrMailMsg := 'Date: '   ||TO_CHAR( SYSDATE,'dd Mon yyyy hh24:mi:ss') ||crlf||
                                    'From:  <' ||'restricao@gmail.com'||'>'               ||crlf||
                                    'Subject: '||'REFRESH VERSAO ' || p_Versao ||
                                               TO_CHAR( SYSDATE,' dd/mm/yyyy hh24:mi:ss')   ||crlf||
                                    'To: '     || ToEmail                                   ||crlf||
                                    ' Atualizações que foram retiradas e recolocadas na base ' ||crlf||
                                    ''                                                      ||crlf||                              
                                    'Banco: ' || db_name || ' - ' || schema_name            ||crlf|| 
                                    ''                                                      ||crlf||
                                    StrDscMsg                                               ||crlf||
                                    ''                                                      ||crlf||
                                    ''                                                      ||crlf||
                                    '[ATUALIZACAO]';
                      UTL_SMTP.HELO(connmail,'smtp');
                      UTL_SMTP.MAIL(connmail,'restricao@gmail.com');
                      UTL_SMTP.RCPT(connmail, RegEmail.MR_MAIL);
                      UTL_SMTP.DATA(connmail,StrMailMsg);
                     -- UTL_SMTP.QUIT(connmail);
            END;
             
            End Loop;
                    UTL_SMTP.QUIT(connmail);  
        End If;
        COMMIT;
            
      END;
       
       
×

Important Information

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