SELECT

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
pedrocestari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Sex, 02 Jul 2010 4:28 pm
Localização: Porto Alegre

Pessoal,

Tenho a seguinte duvida:

Selecionar tudo

			SELECT  L.cd_estabelecimento,L.dt_pagamento, E.nome_reduzido, L.cd_lote, L.dt_entrada,
			L.vl_lote, L.dt_liberacao_pagamento
				 FROM LOTE L, ESTABELECIMENTO E
						WHERE L.cd_estabelecimento = E.cd_estabelecimento
						 and
						NOT EXISTS (
					SELECT  1
						 FROM CONTRATO_AAR
						WHERE cd_estabelecimento = L.cd_estabelecimento
             	AND cd_tipo_situacao_contrato_aar = 2	 )
						 and
						NOT EXISTS (
					SELECT  1
						 FROM ESTABELECIMENTO_ADIANTAMENTO
						WHERE cd_lote = L.cd_lote 		 )
						 and
						NOT EXISTS (
					SELECT  1
						 FROM ESTABELECIMENTO_TAXA_NEGOCIADA
						WHERE cd_lote = L.cd_lote
						 and dt_cancelamento IS NULL 		 )
						 and (cd_motivo_devolucao_lote IS NULL OR cd_motivo_devolucao_lote = 29 )
						 and dt_cancelamento IS NULL
             and l.dt_pagamento is not null
             and l.dt_liberacao_pagamento is not null
Esse select retorna muito registro e gostaria de coloca um clausula que retorne apenas os registro de estabelecimento que possuam mas de 2 lotes por exemplo.

Como poderia fazer??
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

SELECT L.cd_estabelecimento,
       L.dt_pagamento,
       E.nome_reduzido,
       L.cd_lote,
       L.dt_entrada,
       L.vl_lote,
       L.dt_liberacao_pagamento
  FROM LOTE L, ESTABELECIMENTO E
 WHERE L.cd_estabelecimento = E.cd_estabelecimento
   and NOT EXISTS (SELECT 1
          FROM CONTRATO_AAR
         WHERE cd_estabelecimento = L.cd_estabelecimento
           AND cd_tipo_situacao_contrato_aar = 2)
   and NOT EXISTS
 (SELECT 1 FROM ESTABELECIMENTO_ADIANTAMENTO WHERE cd_lote = L.cd_lote)
   and NOT EXISTS
 (SELECT 1
          FROM ESTABELECIMENTO_TAXA_NEGOCIADA
         WHERE cd_lote = L.cd_lote
           and dt_cancelamento IS NULL)
   and (cd_motivo_devolucao_lote IS NULL OR cd_motivo_devolucao_lote = 29)
   and dt_cancelamento IS NULL
   and l.dt_pagamento is not null
   and l.dt_liberacao_pagamento is not null
  group by L.cd_estabelecimento
  having count(*) > 12
pedrocestari
Rank: Estagiário Sênior
Rank: Estagiário Sênior
Mensagens: 12
Registrado em: Sex, 02 Jul 2010 4:28 pm
Localização: Porto Alegre
Pedro Cestari

O problema que o Oracle demostra é que group by, não é uma expressão!! Pois foi exatamente isso que tentei realizar antes de abrir o topic.
victorhugomuniz
Moderador
Moderador
Mensagens: 1396
Registrado em: Sex, 01 Fev 2008 2:06 pm
Localização: Rio de Janeiro - RJ
Contato:
:D

Selecionar tudo

SELECT L.cd_estabelecimento,count(*)
  FROM LOTE L, ESTABELECIMENTO E
 WHERE L.cd_estabelecimento = E.cd_estabelecimento
   and NOT EXISTS (SELECT 1
          FROM CONTRATO_AAR
         WHERE cd_estabelecimento = L.cd_estabelecimento
           AND cd_tipo_situacao_contrato_aar = 2)
   and NOT EXISTS
 (SELECT 1 FROM ESTABELECIMENTO_ADIANTAMENTO WHERE cd_lote = L.cd_lote)
   and NOT EXISTS
 (SELECT 1
          FROM ESTABELECIMENTO_TAXA_NEGOCIADA
         WHERE cd_lote = L.cd_lote
           and dt_cancelamento IS NULL)
   and (cd_motivo_devolucao_lote IS NULL OR cd_motivo_devolucao_lote = 29)
   and dt_cancelamento IS NULL
   and l.dt_pagamento is not null
   and l.dt_liberacao_pagamento is not null
  group by L.cd_estabelecimento
  having count(*) > 2 
pronto ..

:mrgreen:
Avatar do usuário
fsitja
Rank: OraSauro
Rank: OraSauro
Mensagens: 611
Registrado em: Seg, 19 Jan 2009 4:29 pm
Localização: Gaúcho no Rio de Janeiro - RJ
"The scars exist to remind us that the past was real"
Campanha: Como fazer uma pergunta e obter uma resposta.
http://tkyte.blogspot.com/2005/06/how-t ... tions.html

OCA & OCP Developer — OCE SQL Expert — OCS Data Warehousing Specialist

Outra sugestão, caso você queira ver as mesmas colunas do primeiro select (não testado):

Selecionar tudo

SELECT t.*
  FROM (SELECT l.cd_estabelecimento,
               l.dt_pagamento,
               e.nome_reduzido,
               l.cd_lote,
               l.dt_entrada,
               l.vl_lote,
               l.dt_liberacao_pagamento,
               COUNT(l.cd_lote) over(PARTITION BY l.cd_estabelecimento) cnt_estabelecimento
          FROM lote l, estabelecimento e
         WHERE l.cd_estabelecimento = e.cd_estabelecimento
               AND NOT EXISTS (SELECT 1
                  FROM contrato_aar
                 WHERE cd_estabelecimento = l.cd_estabelecimento
                       AND cd_tipo_situacao_contrato_aar = 2)
               AND NOT EXISTS (SELECT 1 FROM estabelecimento_adiantamento WHERE cd_lote = l.cd_lote)
               AND NOT EXISTS (SELECT 1
                  FROM estabelecimento_taxa_negociada
                 WHERE cd_lote = l.cd_lote
                       AND dt_cancelamento IS NULL)
               AND (cd_motivo_devolucao_lote IS NULL OR cd_motivo_devolucao_lote = 29)
               AND dt_cancelamento IS NULL
               AND l.dt_pagamento IS NOT NULL
               AND l.dt_liberacao_pagamento IS NOT NULL) t
 WHERE t.cnt_estabelecimento > 2
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante