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

(Resolvido) Consulta


DiegoVix

Pergunta

Bom Dia!!!

é o seguinte, minha listagem esta assim

Secretaria MATRICULA NOME QT de LAUDOS

CGM 132160 DEUSIMAR LEITE 1

CGM 525032 LUIZ FELIPE DE SOUZA 2

CGM 529086 ULISSES DE MATTOS 1

CGM 529642 ELAINE ALVARENGA OLIVEIRA 1

QUANDO EU RODO ESSE SCRIPT

SELECT U.T01004_S_SIGLA AS Secretaria

,COUNT (*)

-- ROW_NUMBER() OVER( PARTITION BY U.T01004_S_SIGLA ORDER BY S.T01001_I_MATRICULA DESC) SEQ

--,S.T01001_I_MATRICULA, COUNT (*)

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

GROUP BY U.T01004_S_SIGLA

--,S.T01001_I_MATRICULA

ORDER BY U.T01004_S_SIGLA

ELE TRAZ ESSA INFORMAÇÃO

SECRETARIA QT LAUDOS

CGM 5

EU GOSTARIA QUE ELE TROUXESSE TAMBEM A QUANTIDADE DE SERVIDORES

FICANDO ASSIM MINHA LISTAGEM

SECRETARIA QT LAUDOS QT SERVIDORES

CGM 5 4

....

Link para o comentário
Compartilhar em outros sites

10 respostass a esta questão

Posts Recomendados

  • 0

Bom dia Diego,

A listagem que postou é a tabela origem?

Secretaria MATRICULA NOME QT de LAUDOS

CGM 132160 DEUSIMAR LEITE 1

CGM 525032 LUIZ FELIPE DE SOUZA 2

CGM 529086 ULISSES DE MATTOS 1

CGM 529642 ELAINE ALVARENGA OLIVEIRA 1

Com um subselect seria uma alternativa. Ficaria mais ou menos assim:

SELECT U.T01004_S_SIGLA AS Secretaria

, COUNT (*), (select count(*) from TabelaPostada where ...) as QT_SERVIDORES FROM ....

Na cláusula WHERE do subselect, você pode referenciar colunas de tabelas que já estão identificadas no corpo do select normal, ex.:

SELECT U.T01004_S_SIGLA AS Secretaria

, COUNT (*), (select count(*) from TabelaPostada where TabelaPostada.Coluna = S.T01002_I_CDENT ...) as QT_SERVIDORES FROM ....

Uma dica: Quando tenho que fazer selects muito grandes, utilizando muitas tabelas, prefiro fazer passo a passo:

- Crio uma temporária com todos os campos que necessito;

- Insiro a chave de referência (a maioria das vezes a PK);

- "Updato" os demais campos.

Com relação à performance: se você referenciar várias tabelas em apenas um select, os resultados de um relacionamento terão impacto direto nos outros. A probabilidade de referenciar uma tabela locada aumenta (pois há referência de muitas tabelas no script). O mapa de execução será grande. Consumo de memória também.

Fazendo passo a passo, as pesquisas/inserções serão direcionadas e pontuais (mais curtas). Mapa de execução menor, com menos consumo de memória.

Mesmo tendo mais comandos, as vezes o custo/benefício das recuperações de dados em etapas são mais vantajosas. As vezes o processamento fica até mais rápido. O entendimento também fica melhor.

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Diego,

A listagem que postou é a tabela origem?

Secretaria MATRICULA NOME QT de LAUDOS

CGM 132160 DEUSIMAR LEITE 1

CGM 525032 LUIZ FELIPE DE SOUZA 2

CGM 529086 ULISSES DE MATTOS 1

CGM 529642 ELAINE ALVARENGA OLIVEIRA 1

Com um subselect seria uma alternativa. Ficaria mais ou menos assim:

SELECT U.T01004_S_SIGLA AS Secretaria

, COUNT (*), (select count(*) from TabelaPostada where ...) as QT_SERVIDORES FROM ....

Na cláusula WHERE do subselect, você pode referenciar colunas de tabelas que já estão identificadas no corpo do select normal, ex.:

SELECT U.T01004_S_SIGLA AS Secretaria

, COUNT (*), (select count(*) from TabelaPostada where TabelaPostada.Coluna = S.T01002_I_CDENT ...) as QT_SERVIDORES FROM ....

Uma dica: Quando tenho que fazer selects muito grandes, utilizando muitas tabelas, prefiro fazer passo a passo:

- Crio uma temporária com todos os campos que necessito;

- Insiro a chave de referência (a maioria das vezes a PK);

- "Updato" os demais campos.

Com relação à performance: se você referenciar várias tabelas em apenas um select, os resultados de um relacionamento terão impacto direto nos outros. A probabilidade de referenciar uma tabela locada aumenta (pois há referência de muitas tabelas no script). O mapa de execução será grande. Consumo de memória também.

Fazendo passo a passo, as pesquisas/inserções serão direcionadas e pontuais (mais curtas). Mapa de execução menor, com menos consumo de memóri

Mesmo tendo mais comandos, as vezes o custo/benefício das recuperações de dados em etapas são mais vantajosas. As vezes o processamento fica até mais rápido. O entendimento também fica melhor.

acho que me equivoquei em algo Fulvio... por isso talvez não conseguir resolver essa questao... vamos lar

eu tenho uma tabela LTS (listagem de tratamento de saude)...

CDLTS

ANO

SEQUENCIA

TPDOC

CDDEP

CDPESFIS

CDENT

MATRICULA

esses são os campos, eu gostaria de saber o total de matricula que foi cadastrado nas LTS, tipo... '' vale lembrar que eu posso ter a mesma matricula vinculada a diversas LTS'' e quando eu tiver por exemplo matricula 100 = 3 LTS ... eu quero que essa some apenas um... o count que eu fiz foi assim

select T01001_I_MATRICULA, COUNT(*)

from rh.T01135_LTS

GROUP BY T01001_I_MATRICULA

retorna isso

Matricula QT

73547- 1

116890- 1

117390- 2

174173- 3

485926- 1

e eu gostaria que retornasse somente assim Matricula = 5

ok

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Diego,

Tente fazer assim:

select count(distinct T01001_I_MATRICULA) from rh.T01135_LTS

POIS É... ESSE QUE você ME PASSO FOI BOMMM... ERA ESSE RESULTADO QUE EU QUERIA CHEGAR... MAS ESTOU PRECISANDO DE UMA OUTRA SITUAÇÃO DENTRO DA CONSULTA... QUE É

TRAZER O TOTAL DE MATRICULA POR SECRETARIA EU MO0NTEI ESTE SCRIPT

SELECT U.T01004_S_SIGLA AS Secretaria

,COUNT (*) AS QUANTIDADE_LTS

,S.T01001_I_MATRICULA AS MATRICULA

,(SELECT COUNT (DISTINCT T01001_I_MATRICULA )as metr FROM RH.T01135_LTS)

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

GROUP BY U.T01004_S_SIGLA

,S.T01001_I_MATRICULA

ORDER BY U.T01004_S_SIGLA

E ESE TRAS

SECR LTS MATRIC QUANTIDA

CGM- 1- 132160- 3349-

CGM- 2- 525032- 3349-

CGM- 1- 529086- 3349-

CGM- 1- 529642- 3349-

GABPREF- 1- 123919- 3349-

GABPREF- 1- 480385- 3349-

GABPREF- 1- 560704- 3349-

GABPREF- 1- 585013- 3349-

GABPREF- 1- 590244- 3349-

PGM- 1- 63231- 3349-

PGM- 1- 214965- 3349-

E EU QUERIA QUE ELE TROUXESSE ASSIM

SECR LTS MATRIC

CGM- 5- 4-

GABPREF- 5 - 5-

PGM- 2 - 2-

ENTENDEU????

Editado por DiegoVix
Link para o comentário
Compartilhar em outros sites

  • 0

Só não entendi a coluna LTS. Seria interessante você referenciar qual coluna está contando. Mas vamos lá. Como tenho a base de dados, não deu pra rodar o script. Acrescentei a coluna ColunaPossuiLTS no script para ser substituido (creio que seja o U.T01004_S_SIGLA). Ele também deve estar no order by. Altera e vê se roda:

SELECT U.T01004_S_SIGLA AS Secretaria
,COUNT (ColunaPossuiLTS) AS QUANTIDADE_LTS
,S.T01001_I_MATRICULA AS MATRICULA
, COUNT (T01004_S_SIGLA) AS QUANTIDADE_Matricula
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

GROUP BY U.T01004_S_SIGLA 
,S.T01001_I_MATRICULA, ColunaPossuiLTS
ORDER BY U.T01004_S_SIGLA

Link para o comentário
Compartilhar em outros sites

  • 0
Só não entendi a coluna LTS. Seria interessante você referenciar qual coluna está contando. Mas vamos lá. Como tenho a base de dados, não deu pra rodar o script. Acrescentei a coluna ColunaPossuiLTS no script para ser substituido (creio que seja o U.T01004_S_SIGLA). Ele também deve estar no order by. Altera e vê se roda:

SELECT U.T01004_S_SIGLA AS Secretaria
,COUNT (ColunaPossuiLTS) AS QUANTIDADE_LTS
,S.T01001_I_MATRICULA AS MATRICULA
, COUNT (T01004_S_SIGLA) AS QUANTIDADE_Matricula
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

GROUP BY U.T01004_S_SIGLA 
,S.T01001_I_MATRICULA, ColunaPossuiLTS
ORDER BY U.T01004_S_SIGLA
pois é fulvio... eu lancei deste jeito ai... e não deu o resultado esperado... e fui modificando e o mais proximo que cheguei de meu objetivo foi esse codigo
SELECT U.T01004_S_SIGLA  AS Secretaria
,COUNT (*) AS QUANTIDADE_LTS
,(SELECT COUNT (DISTINCT T01001_I_MATRICULA )as MATRICULAS FROM RH.T01135_LTS)AS MATRICULAS
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

GROUP BY  U.T01004_S_SIGLA  
ORDER BY U.T01004_S_SIGLA

e me deu esse resultado

SECRETARIA------ QT DE LTS--------QTD DE MATRICULAS

CGM---------------------5-----------------3349

GABPREF ----------------5----------------3349

PGM----------------------7---------------3349

SECOM-------------------8---------------3349

SECOP--------------------7-------------- 3349

DA UMA OLHADINHA

VALEU OBRIGADO

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Diego,

Tente dar um count na quantidade de matriculas direto, sem utilizar subselect:

SELECT U.T01004_S_SIGLA  AS Secretaria
,COUNT (*) AS QUANTIDADE_LTS
,COUNT (T01001_I_MATRICULA) AS MATRICULAS
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

GROUP BY  U.T01004_S_SIGLA 
ORDER BY U.T01004_S_SIGLA

Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Diego,

Tente dar um count na quantidade de matriculas direto, sem utilizar subselect:

SELECT U.T01004_S_SIGLA  AS Secretaria
,COUNT (*) AS QUANTIDADE_LTS
,COUNT (T01001_I_MATRICULA) AS MATRICULAS
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

GROUP BY  U.T01004_S_SIGLA 
ORDER BY U.T01004_S_SIGLA

bom dia Fulvio!!!

intão... eu fui já tinha testado assim tambem e ele me trouxe esse resultado

SECRETARIA------ QT DE LTS--------QTD DE MATRICULAS

CGM ---------- -- 1------------------------------1

CGM ---------- -- 2---------- -- 2

CGM---------- -- 1---------- -- 1

CGM ---------- -- 1---------- -- 1

GABPREF ---------- -- 1---------- -- 1

GABPREF---------- -- 1---------- -- 1

GABPREF---------- -- 1---------- -- 1

GABPREF ---------- -- 1---------- -- 1

GABPREF ---------- -- 1---------- -- 1

ele tras certinho rapaz... so fica faltando ele acumular entendeu???

Link para o comentário
Compartilhar em outros sites

  • 0

Tenta trocar o * pelo nome do campo LTS.

O subselect está retornando a quantidade 3349 porque você está dando um select sem realizar o filtro nas informações. O 3349 são todas as inserções na coluna de referência.

(SELECT COUNT (DISTINCT T01001_I_MATRICULA )as MATRICULAS FROM RH.T01135_LTS)AS MATRICULAS

você terá que filtrar:

(SELECT COUNT (DISTINCT T01001_I_MATRICULA )as MATRICULAS FROM RH.T01135_LTS where .... )AS MATRICULAS

O problema é que a query pode ficar muuuito grande... :.(

Link para o comentário
Compartilhar em outros sites

  • 0
Tenta trocar o * pelo nome do campo LTS.

O subselect está retornando a quantidade 3349 porque você está dando um select sem realizar o filtro nas informações. O 3349 são todas as inserções na coluna de referência.

(SELECT COUNT (DISTINCT T01001_I_MATRICULA )as MATRICULAS FROM RH.T01135_LTS)AS MATRICULAS

você terá que filtrar:

(SELECT COUNT (DISTINCT T01001_I_MATRICULA )as MATRICULAS FROM RH.T01135_LTS where .... )AS MATRICULAS

O problema é que a query pode ficar muuuito grande... :.(

Bom dia Fulvio,

problema resolvido... o problema que eu tava dando uma cabeçada... ai vai o codigo

SELECT
U.T01004_S_SIGLA AS Secretaria
,COUNT (LTS.T01135_I_CDLTS)        AS QUANTIDADE_LTS
,COUNT ( DISTINCT (S.T01001_I_MATRICULA) ) AS QT_MATRICULAS

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


GROUP BY  U.T01004_S_SIGLA  
ORDER BY  U.T01004_S_SIGLA

tudo resolvido meu camarada... brigadao e até a proxima!!!!

Editado por kuroi
Adicionar tag CODE
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
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...