Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Criar um Count


DiegoVix

Pergunta

Bom dia!!!!

estou precisando criar counts, um para a quantidade de laudos por servidores, e uma quantidade de laudos por secretarias

eu queria saber o que devo acrecentar ou retirar deste codigo

SELECT U.T01004_S_SIGLA AS Secretaria 
     , S.T01001_I_MATRICULA AS Matrícula
     , P.T01000_S_NOME AS Nome
     , LTS.T01135_D_DTEXAME AS Exame
     , RH.fnDadosCarreiraCargo(S.T01002_I_CDENT, S.T01036_I_CDHIERARQ, 0) AS Cargo
     , LTRIM(RTRIM(T01135_S_CID1)) AS CID
     , ISNULL(DATEDIFF(DAY, LAUDO.T01101_D_DTININCAP, LAUDO.T01101_D_DTFIMINCAP) + 1, 0) AS [Dias]
     , PP.T01000_S_NOME AS Perito
     , CASE ISNULL(LAUDO.T01101_I_INDACIDTRAB, 0) WHEN 0 
       THEN  '-' WHEN 1 THEN 'N' WHEN 2 THEN 'S' END AS AT
     , CASE ISNULL(LAUDO.T01101_I_INDDOENTRAB, 0) WHEN 0 
       THEN  '-' WHEN 1 THEN 'N' WHEN 2 THEN 'S' END AS DO
     , ISNULL(LISTA_TPLAUDO.T01071_S_VALORSTR, LISTA_TPLAUDO_APOS.T01071_S_VALORSTR)  AS Laudo
     , LISTA_TPCONCLUSAO.T01071_S_VALORSTR AS Conclusão
     , CAST(DATEDIFF("D",P.T01000_D_DTNASC,getdate())/365.25 AS INT) AS Idade
FROM RH.T01135_LTS LTS
LEFT JOIN RH.T01101_LAUDO LAUDO
    ON  LAUDO.T01135_I_CDLTS = LTS.T01135_I_CDLTS
    AND LAUDO.T01135_I_ANO = LTS.T01135_I_ANO
    AND LAUDO.T01135_I_SEQUENCIA = LTS.T01135_I_SEQUENCIA
    AND LAUDO.T01135_I_TPDOC = LTS.T01135_I_TPDOC
LEFT JOIN RH.T01260_REVISAOAPO APOS
    ON  APOS.T01135_I_CDLTS = LTS.T01135_I_CDLTS
    AND APOS.T01135_I_ANO = LTS.T01135_I_ANO
    AND APOS.T01135_I_SEQUENCIA = LTS.T01135_I_SEQUENCIA
    AND APOS.T01135_I_TPDOC = LTS.T01135_I_TPDOC
INNER JOIN RH.T01001_SERVIDOR S
    ON  S.T01002_I_CDENT = LTS.T01002_I_CDENT
    AND S.T01001_I_MATRICULA = LTS.T01001_I_MATRICULA
INNER JOIN RH.T01000_PESFISICA P
    ON  P.T01000_I_CDPESFIS = S.T01000_I_CDPESFIS
INNER JOIN RH.T01004_UNIDFUNC U
    ON  U.T01002_I_CDENT = S.T01002_I_CDENT
    AND U.T01004_I_CDUNIDFUN = S.T01001_I_CDORGLOT
    AND U.T01004_I_VERSAO = S.T01001_I_VORGLOT
LEFT JOIN RH.T01265_FUNCPERICIA PERITO
    ON PERITO.T01265_I_CDFUNCIONARIO = LTS.T01135_I_CDMEDPERITO
LEFT JOIN RH.T01001_SERVIDOR SP
    ON  SP.T01002_I_CDENT = PERITO.T01002_I_CDENT
    AND SP.T01001_I_MATRICULA = PERITO.T01001_I_MATRICULA
LEFT JOIN RH.T01000_PESFISICA PP
    ON  PP.T01000_I_CDPESFIS = SP.T01000_I_CDPESFIS
LEFT JOIN RH.T01071_ITEMLISTA LISTA_TPLAUDO
    ON  LISTA_TPLAUDO.T01071_I_CDITEM = LAUDO.T01101_I_TPLAUDO
LEFT JOIN RH.T01071_ITEMLISTA LISTA_TPLAUDO_APOS
    ON  LISTA_TPLAUDO_APOS.T01071_I_CDITEM = APOS.T01260_I_TPLAUDO
LEFT JOIN RH.T01071_ITEMLISTA LISTA_TPCONCLUSAO
    ON  LISTA_TPCONCLUSAO.T01071_I_CDITEM = LTS.T01135_I_TPCONCLUSAO
WHERE LTS.T01135_I_TPDOC = 453
  AND LTS.T01135_D_DTEXAME >= @DataIni
  AND LTS.T01135_D_DTEXAME <= @DataFim
  AND (@TipoLaudo IS NULL OR LAUDO.T01101_I_TPLAUDO = @TipoLaudo OR
       APOS.T01260_I_TPLAUDO = @TipoLaudo)
  AND (@TipoConclusao IS NULL OR LTS.T01135_I_TPCONCLUSAO = @TipoConclusao)
  AND (@MatriculaPerito IS NULL OR @MatriculaPerito = PERITO.T01001_I_MATRICULA)
  AND (@MatriculaServidor IS NULL OR @MatriculaServidor = S.T01001_I_MATRICULA)
  AND (@IndAcidTrab IS NULL OR LAUDO.T01101_I_INDACIDTRAB = 2)
  AND (@IndDoenOcup IS NULL OR LAUDO.T01101_I_INDDOENTRAB = 2)
  AND (@Cid IS NULL OR LEFT(LTS.T01135_S_CID1, LEN(@Cid)) LIKE @Cid)
  AND (@NomeServidor IS NULL OR P.T01000_S_NOME LIKE '%' + @NomeServidor + '%')

ORDER BY LTS.T01135_D_DTEXAME

Editado por kuroi
Adicionar tag CODE
Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Diego,

Teoricamente não há o que tirar do script (se os relacionamentos são realmente necessários).

Para utilizar o count, você terá que utilizar o group by. No final (antes do order by) você coloca o group by dos campos de retorno. Confira para que o resultado não seja alterado. Depois você dá o count nos dois campos que necessita.

No caso da função ISNULL que utiliza, você terá que referenciar os dois campos no agrupamento. Dê uma olhada no retorno da função fnDadosCarreiraCargo também.

Outra solução será criar uma temporária (pode ser até em tempo de execução), jogar o resultado nesta temporária e dar o count nos dados.

Link para o comentário
Compartilhar em outros sites

  • 0
Boa tarde Diego,

Teoricamente não há o que tirar do script (se os relacionamentos são realmente necessários).

Para utilizar o count, você terá que utilizar o group by. No final (antes do order by) você coloca o group by dos campos de retorno. Confira para que o resultado não seja alterado. Depois você dá o count nos dois campos que necessita.

No caso da função ISNULL que utiliza, você terá que referenciar os dois campos no agrupamento. Dê uma olhada no retorno da função fnDadosCarreiraCargo também.

Outra solução será criar uma temporária (pode ser até em tempo de execução), jogar o resultado nesta temporária e dar o count nos dados.

Bom Dia Fulvio,

nem preciso criar a temporaria... eu so lancei o group by que faltava e deu certo!!!!!!

obrigado

já esta resolvido!!!!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...