SELECT R.NMREPRES AS NOME , NVL(COUNT(P.NRPEDIDO), 0) AS TOTAL
FROM REPRESENTANTE R, PEDIDO P
WHERE R.CDREPRES (+) = P.CDREPRES AND
P.STPEDIDO = 'P'
GROUP BY R.NMREPRES
Dificuldade Left Join Oracle 10G
- jorginho19
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 05 Mai 2009 11:03 am
- Localização: Uberaba
Bom dia a todos, estou com o seguinte problema no oracle 10G. Ao executar o comando abaixo, como resultado apresenta somente os itens que tem relacionado nas duas tabelas e preciso que apresente todos os representantes mesmo se ele não tiver pedido. A forma que estou fazendo esta correta?
ATT
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Está invertido!
Caso não tenha pedido, então o (+) tem que estar nele.
SELECT R.NMREPRES AS NOME , NVL(COUNT(P.NRPEDIDO), 0) AS TOTAL
FROM REPRESENTANTE R, PEDIDO P
WHERE R.CDREPRES = P.CDREPRES(+)
AND P.STPEDIDO = 'P'
GROUP BY R.NMREPRES
- jorginho19
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 05 Mai 2009 11:03 am
- Localização: Uberaba
Coloquei assim e tambem não funcionou!
SELECT R.NMREPRES AS NOME , NVL(COUNT(P.NRPEDIDO), 0) AS TOTAL
FROM REPRESENTANTE R, PEDIDO P
WHERE R.CDREPRES = P.CDREPRES (+) AND
P.STPEDIDO = 'P'
GROUP BY R.NMREPRES
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Tem razão.
É que você está filtrando o P também.
Então tem que colocar assim:
Em todos os campos do P.
É que você está filtrando o P também.
Então tem que colocar assim:
SELECT R.NMREPRES AS NOME , NVL(COUNT(P.NRPEDIDO), 0) AS TOTAL
FROM REPRESENTANTE R, PEDIDO P
WHERE R.CDREPRES = P.CDREPRES(+)
AND P.STPEDIDO(+) = 'P'
GROUP BY R.NMREPRES
- jorginho19
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 05 Mai 2009 11:03 am
- Localização: Uberaba
Funcionou beleza, muitissimo obrigado!
-
- Rank: Estagiário Júnior
- Mensagens: 1
- Registrado em: Ter, 28 Abr 2009 1:35 pm
- Localização: Araraquara-SP
Pessoal,
Apenas como informação, fiz um teste em duas de minhas tabelas e o resultado foi mais rápido:
Apenas como informação, fiz um teste em duas de minhas tabelas e o resultado foi mais rápido:
SELECT R.NMREPRES AS NOME , NVL(COUNT(P.NRPEDIDO), 0) AS TOTAL
FROM REPRESENTANTE R LEFT JOIN PEDIDO P ON (R.CDREPRES = P.CDREPRES AND P.STPEDIDO = 'P' )
GROUP BY R.NMREPRES
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Provavelmente foi mais rapido porque na segunda tentativa os blocos estavam em cache.
- jorginho19
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 05 Mai 2009 11:03 am
- Localização: Uberaba
Se alguém puder me ajudar a primeira pregunta foi uma das duvidas para fazer a sql abaixo funcionar e a mesma esta me fazendo quebrar a cabeça, se o representante fez pedido beleza mais os que não fizeram pedido ainda não aparecem! alguém pode me ajudar?
SELECT R.CDSUPERV, R.CDREPRES, R.NMREPRES,
COUNT(DISTINCT(PR.CDPRODUT)) AS MIX_ATENDIDO,
(SELECT COUNT(DISTINCT(P.CDPRODUT) )
FROM PRODUTO P, FORNECEDOR F, LIVPRECO L
WHERE F.CDFORNEC = 57708 AND
F.CDFORNEC = P.CDFABRIC AND
P.CDPRODUT = L.CDPRODUT AND
L.NRSEMANA >= (200902) AND
L.NRSEMANA <= (200915)
) AS MIX_TOTAL,
COUNT(DISTINCT(P.CDCLIENT)) AS CLIENTES_ATENDIDOS,
(SELECT COUNT(C.CDCLIENT)
FROM CLIENTE C, ZONEMPRESA Z
WHERE R.CDREPRES = Z.CDREPRES AND
C.STLIBERA = 'S' AND
C.CDZONA = Z.CDZONA
) AS CLIENTES_TOTAL,
ROUND(SUM(I.QTAPROVA * I.VRUNITAR),2)AS VENDAS_TOTAL
FROM REPRESENTANTE R, PEDIDO P, ITEPEDIDO I, FORNECEDOR F, PRODUTO PR
WHERE R.CDSUPERV NOT IN (191,100) AND
F.CDFORNEC = 57708 AND
F.CDFORNEC = PR.CDFABRIC AND
R.CDREPRES = P.CDREPRES (+) AND
P.STPEDIDO (+) = 'F' AND
P.NRPEDIDO = I.NRPEDIDO AND
P.CDEMPRES = I.CDEMPRES AND
P.DTPEDIDO >= TO_DATE('14/01/2009', 'DD/MM/YYYY') AND
P.DTPEDIDO <= TO_DATE('18/04/2009', 'DD/MM/YYYY') AND
PR.CDPRODUT = I.CDPRODUT
GROUP BY R.CDSUPERV, R.CDREPRES, R.NMREPRES
ORDER BY R.CDSUPERV, R.NMREPRES
- jorginho19
- Rank: Estagiário Pleno
- Mensagens: 5
- Registrado em: Ter, 05 Mai 2009 11:03 am
- Localização: Uberaba
So a nivel de curiosidade esta ai a resposta!
SELECT R.CDSUPERV, R.CDREPRES, R.NMREPRES,
COUNT(DISTINCT(PR.CDPRODUT)) AS MIX_ATENDIDO,
(SELECT COUNT(DISTINCT(P.CDPRODUT) )
FROM PRODUTO P, FORNECEDOR F, LIVPRECO L
WHERE F.CDFORNEC = 57708 AND
F.CDFORNEC = P.CDFABRIC AND
P.CDPRODUT = L.CDPRODUT AND
L.NRSEMANA >= (200902) AND
L.NRSEMANA <= (200915)
) AS MIX_TOTAL,
COUNT(DISTINCT(P.CDCLIENT)) AS CLIENTES_ATENDIDOS,
(SELECT NVL(COUNT(C.CDCLIENT),0)
FROM CLIENTE C, ZONEMPRESA Z
WHERE R.CDREPRES = Z.CDREPRES AND
C.STLIBERA = 'S' AND
C.CDZONA = Z.CDZONA
) AS CLIENTES_TOTAL,
ROUND(NVL(SUM(I.QTAPROVA * I.VRUNITAR),0),2) AS VENDAS_TOTAL
FROM REPRESENTANTE R, PEDIDO P, ITEPEDIDO I, FORNECEDOR F, PRODUTO PR
WHERE R.CDSUPERV NOT IN (191,100) AND
R.STREPRES = 'A' AND
R.CDEQUREP = 1 AND
R.CDREPRES = P.CDREPRES (+) AND
P.STPEDIDO (+) = 'F' AND
P.NRPEDIDO = I.NRPEDIDO (+) AND
P.CDEMPRES = I.CDEMPRES (+) AND
P.DTPEDIDO (+) >= TO_DATE('14/01/2009', 'DD/MM/YYYY') AND
P.DTPEDIDO (+) <= TO_DATE('18/04/2009', 'DD/MM/YYYY') AND
PR.CDPRODUT (+) = I.CDPRODUT AND
F.CDFORNEC (+) = 57708 AND
F.CDFORNEC (+) = PR.CDFABRIC
GROUP BY R.CDSUPERV, R.CDREPRES, R.NMREPRES
ORDER BY R.CDSUPERV, R.NMREPRES
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 17 visitantes