Difficulty Left Join Oracle 10 g

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
  

Poston Tue, 05 May 2009 11:09 am

Good morning to all, I have the following problem in oracle 10 g. When you run the command below as a result displays only those items that have listed in both tables and need to submit all representatives even if he has not requested. The way I'm doing this correctly?


Code: Select all
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
ATT
jorginho19
Location: Uberaba

ATT
Jorge Gonçalves Filho
Tecnico em Informática
jorge@globalcosmeticos.com.br

Poston Tue, 05 May 2009 11:24 am

Is reversed!
Code: Select all
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
If you have not requested, then the (+) have to be in it.
dr_gori
Location: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Poston Tue, 05 May 2009 11:35 am

Put that way, and neither worked.

SELECT r. NMREPRES the NAME, NVL (COUNT (p. NRPEDIDO), 0) the TOTAL FROM R REPRESENTATIVE, REQUEST P WHERE CDREPRES = r. p. CDREPRES (+) AND p. STPEDIDO = ' P ' GROUP BY r. NMREPRES
jorginho19
Location: Uberaba

ATT
Jorge Gonçalves Filho
Tecnico em Informática
jorge@globalcosmeticos.com.br

Poston Tue, 05 May 2009 12:48 pm

You're right.
Are you filtering the P also.
Then you have to put it like this:
Code: Select all
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
In all fields of P.
dr_gori
Location: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Poston Tue, 05 May 2009 1:30 pm

Beauty worked, thank you very much!
jorginho19
Location: Uberaba

ATT
Jorge Gonçalves Filho
Tecnico em Informática
jorge@globalcosmeticos.com.br

Poston Tue, 05 May 2009 3:39 pm

Guys, Just as information, I did a test on two of my tables and the result was faster: SELECT r. NMREPRES the NAME, NVL (COUNT (p. NRPEDIDO), 0) the TOTAL FROM REPRESENTATIVE R LEFT JOIN REQUEST P ON (r. CDREPRES = p. CDREPRES AND p. STPEDIDO = ' P ') GROUP BY r. NMREPRES
Cilso
Location: Araraquara-SP

Poston Tue, 05 May 2009 4:08 pm

It was probably faster because on the second attempt the blocks were cached.
dr_gori
Location: Portland, OR USA

Thomas F. G

Você já respondeu a dúvida de alguém hoje?
http://glufke.net/oracle/search.php?search_id=unanswered

Poston Tue, 05 May 2009 4:33 pm

If anyone can help me the first question was one of the questions to make the sql below work and the same this making me break your head, if the delegate ordered that didn't make them beleza request yet not appear! Can someone help me?

Code: Select all
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
Location: Uberaba

ATT
Jorge Gonçalves Filho
Tecnico em Informática
jorge@globalcosmeticos.com.br

Poston Thu, 07 May 2009 10:17 am

So the level of curiosity there the answer!

Code: Select all
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
jorginho19
Location: Uberaba

ATT
Jorge Gonçalves Filho
Tecnico em Informática
jorge@globalcosmeticos.com.br


  • See also
    Replies
    Views
    Last Post


      Return to SQL

      Who is online

      Users browsing this forum: No registered users and 2 guests