Ir para conteúdo
FabianoSouza

SELECT de registros sem associação, com subquery

Recommended Posts

Eu possuo a tab TURMA e a EVENTOS (que são as aulas do curso).

Estão relacionadas (chave primária da TURMA com chave estrangeira de EVENTOS).

Em minha consulta, eu listo as turmas.

Até aqui, sem problema.
 

 

Problema a ser resolvido:

Quando uma determinada TURMA não tiver EVENTO associado a ela, a TURMA não aparece no select.:grimace:


Preciso que dados da TURMA sejam exibidos mesmo se não houver evento associado a ela (significa que ainda não há as datas definidas para a realização do curso para aquela turma). 

 

Atualmente o código está assim:

SELECT TT.id, TT.nome, CTA.nomeFantasia, tmp.previsto AS Previstos, tmp.realizado AS Realizados
FROM dbo.tabDeTURMA TT

INNER JOIN --esse JOIN é para trazer detalhes da empresa da qual essa turma pertence...
dbo.tabDeCliente AS CTA ON TT.codCliente = CTA.contaCod
,
(SELECT
 COUNT(*) previsto
 -- aqui faz o cálculo de percentual que preciso e formata o valor.
 , SUBSTRING(
FORMAT(
CAST((SUM(CASE WHEN EVT.dataFinal <= GETDATE() THEN 1 ELSE 0 END) / CAST(COUNT(*) AS NUMERIC (10,3)) *100) AS NUMERIC(10,3)), 'N', 'pt-BR'),1,4) AS 'realizado'
 
 , EVT.codTurma
FROM dbo.tabDeEventos EVT
GROUP BY EVT.codTurma) tmp

--aparentemente o problema está no WHERE. Mas se eu remover, gera duplicidades
WHERE TT.id = tmp.codTurma

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por danilo759
      Estou precisando saber o percentual de imagens que está no diretório e estou com dificuldades. Alguém pode me ajudar dar uma luz?

       
      $qry_canal = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal IN('HBO','GLO','TNT') GROUP BY dados.titulo"); $counter = 0; while($rows = $qry_canal->fetch(PDO::FETCH_ASSOC)){ $id = $rows['id']; $sigla = $rows['canal']; $sk = substr($rows['sk'], 0, 14); // Busca total de programas por canal /* ---------------------------------------------------------------- */ $qry_b = $con->query("SELECT * FROM grade, dados WHERE grade.id = dados.id AND grade.canal LIKE '".$sigla."' GROUP BY dados.titulo"); $total_programas = $qry_b->rowCount(); if(empty($serieskey)) { $prog_id = "$id"; } else{ $prog_id = "$sk"; } // VERIFICA SE EXISTE IMAGEM /* ---------------------------------------------------------------- */ if(file_exists("/imagens/".$prog_id."_epg.jpg")){ $arr_img[] = "".$counter++.""; } $total_fotos = "".count($arr_img).""; echo "".($total_fotos * 100 ) / $total_programas."% <br />"; }  
    • Por noobroots
      Boa noite !
       
      Tenho  a seguinte query abaixo que me retorna a origem , a contagem e o percentual de  uma consulta.
      SELECT origem, count(*) AS contagem, count(origem) / (SELECT count(*) FROM atendimento_cad) * 100 as percentual          FROM atendimento_cad GROUP BY origem order by percentual desc  
      origem contagem    percentual 
      2000  5866    34.9875 3000   3099 18.4838 4000 2621 15.6328              
       
      porém preciso criar uma nova tabela para me retornar a soma do percentual ( acumulativo )ex:
       
      origem  contagem    percentual      Acumulado
      2000      5866              34.9875          34.9875
      3000      3099             18.4838          53.4713
      4000      2621             15.6328          69.1041
      e assim por diante até 100%
       
      Alguém pode me ajudar?
        
    • Por thatadeoliveira
      Boa Noite
      Tenho uma tabela de preços, criei a seguinte query. Porém não estou conseguindo concluir
      Preciso de uma ajuda! Nesse código preciso, tirar o percentual de aumento entre os procedimentos (CD_PROCEDIMENTO)
      Os que tem data de vigência final são os valores anterior e os que não tem vigência final (null) são os valores atuais.
      Preciso pegar o valor do (cd_procedimento) da data final (A.DT_FINAL_VIGENCIA)  diminuir do mesmo valor do  (cd_procedimento) só que da data de vigência final= null.
      Daí tirar o percentual de quantos teve de aumento.
       
       
      Será que alguém sabe como fazer esse calculo direto aqui nessa query .??
      Atualmente ela trás o valor do procedimento atual e o ultimo com vigência final!
      ___________________________
      SELECT DISTINCT B.DS_CONVENIO, TO_CHAR( A.DT_INICIO_VIGENCIA, 'DD/MM/YYYY')DT_INICIO_VIGENCIA, TO_CHAR( A.DT_FINAL_VIGENCIA, 'DD/MM/YYYY')DT_FINAL_VIGENCIA, A.VL_PROC_AJUSTADO, A.CD_PROCEDIMENTO, C.DS_PROC_INTERNO, D.DS_PLANO FROM REGRA_AJUSTE_PROC A LEFT JOIN PROCEDIMENTO C ON (A.CD_PROCEDIMENTO = C.CD_PROCEDIMENTO) LEFT JOIN CONVENIO B ON (A.CD_CONVENIO = B.CD_CONVENIO) LEFT JOIN CONVENIO_PLANO D ON (A.CD_PLANO = D.CD_PLANO) WHERE B.IE_SITUACAO = 'A' AND C.DS_PROC_INTERNO IS NOT NULL AND A.DT_FINAL_VIGENCIA IS NULL UNION ALL SELECT DISTINCT B.DS_CONVENIO, TO_CHAR( A.DT_INICIO_VIGENCIA, 'DD/MM/YYYY')DT_INICIO_VIGENCIA, TO_CHAR( A.DT_FINAL_VIGENCIA, 'DD/MM/YYYY')DT_FINAL_VIGENCIA, A.VL_PROC_AJUSTADO, A.CD_PROCEDIMENTO, C.DS_PROC_INTERNO, D.DS_PLANO FROM REGRA_AJUSTE_PROC A LEFT JOIN PROCEDIMENTO C ON (A.CD_PROCEDIMENTO = C.CD_PROCEDIMENTO) LEFT JOIN CONVENIO B ON (A.CD_CONVENIO = B.CD_CONVENIO) LEFT JOIN CONVENIO_PLANO D ON (A.CD_PLANO = D.CD_PLANO) WHERE B.IE_SITUACAO = 'A' AND C.DS_PROC_INTERNO IS NOT NULL AND TRUNC(A.DT_FINAL_VIGENCIA ) IN( SELECT DISTINCT TRUNC(MAX(J.DT_FINAL_VIGENCIA)) FROM REGRA_AJUSTE_PROC J WHERE A.CD_CONVENIO = J.CD_CONVENIO) ORDER BY 1,6  
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.