Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Peu Cabral

group by e subselect

Recommended Posts

Olá pessoal, bom dia. Sou novato não só no fórum como também em Oracle.

 

Estou com o seguinte problema: Estou com dois códigos que de forma independente eles funcionam normalmente, porém gostaria de que as informações dos dois códigos fossem resultado em um select.

 

O código é o seguinte:

 

No 1º me retorna um valor de meta de vendas, levando-se em conta todas as vendas efetuadas desde o ínicio do ano atual até o último mês passado. Vejam que utilizei uma SUM e Group By para me retornar a soma do grupo e também um subselect para me retornar os 20 maiores clientes.

 

No 2º me retorna o valor de venda do mês atual. Também utilizei SUM e Group By para retornar a soma de vendas de cada código de cliente, com um subselect para me retornar os 20 maiores compradores do mês atual.

 

O que gostaria era de que essas informações fossem agrupadas onde eu teria, por exemplo:

 

Cód | Meta | Venda

123 9876 530

 

Se puderem me ajudar nessa questão ficaria agradecido. ;) Os códigos estão logo abaixo:

 

 

SELECT CODCLIPRINC,VLMETA FROM 
(SELECT PCCLIENT.CODCLIPRINC, SUM( (NVL (PCPEDC.VLATEND,0) * 12 / to_char(add_months(sysdate,-1),'MM') - NVL(PCPEDC.VLATEND,0)) / (12 -
to_char(add_months(sysdate,-1),'MM'))) VLMETA
FROM PCPEDC, PCPLPAG,PCUSUARI, PCCLIENT 
WHERE (PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG)
  AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR
  AND (PCPEDC.DATA >= TRUNC(SYSDATE,'year'))
  AND (PCPEDC.DATA <= LAST_DAY(add_months(SYSDATE,-1)))
  AND (PCPEDC.DTCANCEL IS NULL)
  AND (PCPEDC.CONDVENDA NOT IN (10))
  AND (PCUSUARI.CODSUPERVISOR = '7')
  AND (PCPEDC.CODUSUR = '82')
  and (pcpedc.codcli = pcclient.codcli)
group by pcclient.codcliprinc
order by VLMETA DESC
) META
where rownum<=20


select CODCLIPRINC, VLVENDA FROM
(SELECT PCCLIENT.CODCLIPRINC, SUM( NVL (PCPEDC.VLATEND,0)) VLVENDA
FROM PCPEDC, PCPLPAG,PCUSUARI, PCCLIENT 
WHERE (PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG)
  AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR
  AND (PCPEDC.DATA >= TRUNC(SYSDATE,'MONTH'))
  AND (PCPEDC.DATA <= LAST_DAY(SYSDATE))
  AND (PCPEDC.DTCANCEL IS NULL)
  AND (PCPEDC.CONDVENDA NOT IN (10))
  AND (PCUSUARI.CODSUPERVISOR = '7')
  AND (PCPEDC.CODUSUR = '82')
  and (pcpedc.codcli = pcclient.codcli)
group by pcclient.codcliprinc
order by VLVENDA DESC
) VENDA
WHERE ROWNUM<=20

Compartilhar este post


Link para o post
Compartilhar em outros sites

Supondo que seja só "juntar" os dois SQL, ou seja a data de referência é a mesma.

 

SELECT * FROM 
(SELECT PCCLIENT.CODCLIPRINC, SUM( (NVL (PCPEDC.VLATEND,0) * 12 / to_char(add_months(sysdate,-1),'MM') - NVL(PCPEDC.VLATEND,0)) / (12 -
to_char(add_months(sysdate,-1),'MM'))) VLMETA
FROM PCPEDC, PCPLPAG,PCUSUARI, PCCLIENT 
WHERE (PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG)
  AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR
  AND (PCPEDC.DATA >= TRUNC(SYSDATE,'year'))
  AND (PCPEDC.DATA <= LAST_DAY(add_months(SYSDATE,-1)))
  AND (PCPEDC.DTCANCEL IS NULL)
  AND (PCPEDC.CONDVENDA NOT IN (10))
  AND (PCUSUARI.CODSUPERVISOR = '7')
  AND (PCPEDC.CODUSUR = '82')
  and (pcpedc.codcli = pcclient.codcli)
group by pcclient.codcliprinc
order by VLMETA DESC
) META,
(SELECT PCCLIENT.CODCLIPRINC, SUM( NVL (PCPEDC.VLATEND,0)) VLVENDA
FROM PCPEDC, PCPLPAG,PCUSUARI, PCCLIENT 
WHERE (PCPEDC.CODPLPAG = PCPLPAG.CODPLPAG)
  AND PCPEDC.CODUSUR = PCUSUARI.CODUSUR
  AND (PCPEDC.DATA >= TRUNC(SYSDATE,'MONTH'))
  AND (PCPEDC.DATA <= LAST_DAY(SYSDATE))
  AND (PCPEDC.DTCANCEL IS NULL)
  AND (PCPEDC.CONDVENDA NOT IN (10))
  AND (PCUSUARI.CODSUPERVISOR = '7')
  AND (PCPEDC.CODUSUR = '82')
  and (pcpedc.codcli = pcclient.codcli)
group by pcclient.codcliprinc
order by VLVENDA DESC
) VENDA
WHERE META.CODCLIPRINC = VENDA.CODCLIPRINC

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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