DiegoVix Postado Abril 15, 2010 Denunciar Share Postado Abril 15, 2010 Bom Dia!!!é o seguinte, minha listagem esta assimSecretaria MATRICULA NOME QT de LAUDOSCGM 132160 DEUSIMAR LEITE 1CGM 525032 LUIZ FELIPE DE SOUZA 2CGM 529086 ULISSES DE MATTOS 1CGM 529642 ELAINE ALVARENGA OLIVEIRA 1QUANDO 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 LTSLEFT 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_TPDOCLEFT 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_TPDOCINNER JOIN RH.T01001_SERVIDOR S ON S.T01002_I_CDENT = LTS.T01002_I_CDENT AND S.T01001_I_MATRICULA = LTS.T01001_I_MATRICULAINNER JOIN RH.T01000_PESFISICA P ON P.T01000_I_CDPESFIS = S.T01000_I_CDPESFISINNER 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_VORGLOTLEFT JOIN RH.T01265_FUNCPERICIA PERITO ON PERITO.T01265_I_CDFUNCIONARIO = LTS.T01135_I_CDMEDPERITOLEFT JOIN RH.T01001_SERVIDOR SP ON SP.T01002_I_CDENT = PERITO.T01002_I_CDENT AND SP.T01001_I_MATRICULA = PERITO.T01001_I_MATRICULALEFT JOIN RH.T01000_PESFISICA PP ON PP.T01000_I_CDPESFIS = SP.T01000_I_CDPESFISGROUP BY U.T01004_S_SIGLA --,S.T01001_I_MATRICULAORDER BY U.T01004_S_SIGLAELE TRAZ ESSA INFORMAÇÃOSECRETARIA QT LAUDOSCGM 5EU GOSTARIA QUE ELE TROUXESSE TAMBEM A QUANTIDADE DE SERVIDORESFICANDO ASSIM MINHA LISTAGEMSECRETARIA QT LAUDOS QT SERVIDORESCGM 5 4.... Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Abril 16, 2010 Denunciar Share Postado Abril 16, 2010 Bom dia Diego, A listagem que postou é a tabela origem?Secretaria MATRICULA NOME QT de LAUDOSCGM 132160 DEUSIMAR LEITE 1CGM 525032 LUIZ FELIPE DE SOUZA 2CGM 529086 ULISSES DE MATTOS 1CGM 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. Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Abril 19, 2010 Autor Denunciar Share Postado Abril 19, 2010 Bom dia Diego, A listagem que postou é a tabela origem?Secretaria MATRICULA NOME QT de LAUDOSCGM 132160 DEUSIMAR LEITE 1CGM 525032 LUIZ FELIPE DE SOUZA 2CGM 529086 ULISSES DE MATTOS 1CGM 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 lareu tenho uma tabela LTS (listagem de tratamento de saude)... CDLTSANOSEQUENCIATPDOCCDDEPCDPESFISCDENTMATRICULAesses 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 assimselect T01001_I_MATRICULA, COUNT(*)from rh.T01135_LTSGROUP BY T01001_I_MATRICULAretorna issoMatricula QT73547- 1116890- 1117390- 2174173- 3485926- 1e eu gostaria que retornasse somente assim Matricula = 5ok Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Abril 19, 2010 Denunciar Share Postado Abril 19, 2010 Bom dia Diego, Tente fazer assim: select count(distinct T01001_I_MATRICULA) from rh.T01135_LTS Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Abril 19, 2010 Autor Denunciar Share Postado Abril 19, 2010 (editado) Bom dia Diego, Tente fazer assim: select count(distinct T01001_I_MATRICULA) from rh.T01135_LTSPOIS É... 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 LTSLEFT 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_TPDOCLEFT 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_TPDOCINNER JOIN RH.T01001_SERVIDOR S ON S.T01002_I_CDENT = LTS.T01002_I_CDENT AND S.T01001_I_MATRICULA = LTS.T01001_I_MATRICULAINNER JOIN RH.T01000_PESFISICA P ON P.T01000_I_CDPESFIS = S.T01000_I_CDPESFISINNER 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_VORGLOTLEFT JOIN RH.T01265_FUNCPERICIA PERITO ON PERITO.T01265_I_CDFUNCIONARIO = LTS.T01135_I_CDMEDPERITOLEFT JOIN RH.T01001_SERVIDOR SP ON SP.T01002_I_CDENT = PERITO.T01002_I_CDENT AND SP.T01001_I_MATRICULA = PERITO.T01001_I_MATRICULALEFT JOIN RH.T01000_PESFISICA PP ON PP.T01000_I_CDPESFIS = SP.T01000_I_CDPESFISGROUP BY U.T01004_S_SIGLA ,S.T01001_I_MATRICULAORDER BY U.T01004_S_SIGLAE ESE TRAS SECR LTS MATRIC QUANTIDACGM- 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 ASSIMSECR LTS MATRIC CGM- 5- 4-GABPREF- 5 - 5-PGM- 2 - 2-ENTENDEU???? Editado Abril 19, 2010 por DiegoVix Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Abril 19, 2010 Denunciar Share Postado Abril 19, 2010 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Abril 26, 2010 Autor Denunciar Share Postado Abril 26, 2010 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_SIGLAe me deu esse resultado SECRETARIA------ QT DE LTS--------QTD DE MATRICULASCGM---------------------5-----------------3349GABPREF ----------------5----------------3349PGM----------------------7---------------3349SECOM-------------------8---------------3349SECOP--------------------7-------------- 3349DA UMA OLHADINHAVALEU OBRIGADO Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Abril 26, 2010 Denunciar Share Postado Abril 26, 2010 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Abril 26, 2010 Autor Denunciar Share Postado Abril 26, 2010 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_SIGLAbom dia Fulvio!!!intão... eu fui já tinha testado assim tambem e ele me trouxe esse resultadoSECRETARIA------ QT DE LTS--------QTD DE MATRICULASCGM ---------- -- 1------------------------------1CGM ---------- -- 2---------- -- 2CGM---------- -- 1---------- -- 1CGM ---------- -- 1---------- -- 1GABPREF ---------- -- 1---------- -- 1GABPREF---------- -- 1---------- -- 1GABPREF---------- -- 1---------- -- 1GABPREF ---------- -- 1---------- -- 1GABPREF ---------- -- 1---------- -- 1ele tras certinho rapaz... so fica faltando ele acumular entendeu??? Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 fulvio Postado Abril 26, 2010 Denunciar Share Postado Abril 26, 2010 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... :.( Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 DiegoVix Postado Maio 6, 2010 Autor Denunciar Share Postado Maio 6, 2010 (editado) 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 codigoSELECT 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_SIGLAtudo resolvido meu camarada... brigadao e até a proxima!!!! Editado Maio 7, 2010 por kuroi Adicionar tag CODE Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
DiegoVix
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
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.