none
Trazer registros sem valor RRS feed

  • Pergunta

  • Boa tarde!

    Estou tentando montar um query que me traga as "solicitações de compras" que já possuem "Pedidos de Compras" e os que não tem, porém na minha query só esta trazendo as solicitações que possuem pedidos.

    Alguém poderia me ajudar a identificar o erro?

    SELECT  '01' EMP, SC1.C1_FILIAL, SC1.C1_NUM, 
    	 SC1.C1_ITEM, SC1.C1_VUNIT, SC1.C1_EMISSAO, 
    	 SC1.C1_PEDIDO, SC1.C1_ITEMPED,  SC7.C7_NUM,   SC7.C7_ITEM, SC7.C7_EMISSAO
    FROM  SC1010 SC1
    LEFT OUTER JOIN SC7010 SC7 ON  SC7.C7_NUM = SC1.C1_PEDIDO 
    	         	  AND SC7.C7_ITEM = SC1.C1_ITEMPED
    WHERE  SC1.D_E_L_E_T_ = '' 
    AND (SC7.D_E_L_E_T_ = '' OR SC7.D_E_L_E_T_ IS NULL)
    
    

    Nessa query ele só esta mostrando as solicitações que possuem pedidos , porém ela tem que mostar as que nao tem também

    sexta-feira, 26 de maio de 2017 18:23

Respostas

Todas as Respostas

  • Boa tarde Carine,

    Tente dessa forma:

    SELECT  '01' EMP, SC1.C1_FILIAL, SC1.C1_NUM, 
    	 SC1.C1_ITEM, SC1.C1_VUNIT, SC1.C1_EMISSAO, 
    	 SC1.C1_PEDIDO, SC1.C1_ITEMPED,  SC7.C7_NUM,   SC7.C7_ITEM, SC7.C7_EMISSAO
    FROM  SC1010 SC1
    LEFT OUTER JOIN SC7010 SC7 ON  SC7.C7_NUM = SC1.C1_PEDIDO 
    	         	  AND SC7.C7_ITEM = SC1.C1_ITEMPED
    AND SC7.D_E_L_E_T_ = ''
    WHERE  SC1.D_E_L_E_T_ = '' 

    Se você colocar algum campo da tabela que é "nullable" na cláusula where, o seu left join acaba se tornando um inner join.

    Por isso que está gerando o problema.


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski


    sexta-feira, 26 de maio de 2017 18:27
  • Obrigada Kanaam por sua atenção ... porém ainda nao funcionou

    estou usando uma sc como exemplo

    essa sc tem 5 itens porém apenas 2 itens tem pedido de compra.

    E ao rodar o select ele só esta me trazendo os dois itens que já possuem pedidos de compras, os itens que nao possuem ele nao mostra.

    sexta-feira, 26 de maio de 2017 19:03
  • Boa tarde,

    Carine, só para confirmar, a tabela de pedidos é a SC7010?

    Se for acho que deveria funcionar, mas se for a SC1010 acho que seria melhor inverter a ordem das tabelas deixando a SC7010 depois do From e a SC1010 depois do Left Outer Join.

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    sexta-feira, 26 de maio de 2017 19:30
  • Quero que traga todas as Solictações de compras  SC1010 , que possuam pedidos ( SC7010) ou nao.

    SELECT  '01' EMP, SC1.C1_FILIAL, SC1.C1_NUM, 
    	 SC1.C1_ITEM, SC1.C1_VUNIT, SC1.C1_EMISSAO, 
    	 SC1.C1_PEDIDO, SC1.C1_ITEMPED,  SC7.C7_NUM,   SC7.C7_ITEM, SC7.C7_EMISSAO
    FROM  SC1010 SC1
    LEFT OUTER JOIN SC7010 SC7 ON  SC7.C7_NUM = SC1.C1_PEDIDO 
    	         	  AND SC7.C7_ITEM = SC1.C1_ITEMPED
    WHERE  SC1.D_E_L_E_T_ = '' 
    AND (SC7.D_E_L_E_T_ = '' OR SC7.D_E_L_E_T_ IS NULL)

    Acho que dever alguma coisa no left que ta unindo o pedido e item...
    Nesse select ele só esta me trazendo as solicitações(SC1) com PEdidos (SC7)

    mesmo eu informando a condição is null no where ...


    sexta-feira, 26 de maio de 2017 19:41
  • Boa tarde Carine,

    Realizei um teste com algumas SC's aqui e funcionou corretamente.

    Como está sendo retornada a sua consulta?


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    sexta-feira, 26 de maio de 2017 19:49
  • Dando apenas o select na tabela SC! usando uma SC como exemplo:

    SELECT C1_NUM, C1_ITEM, PEDIDO_COMPRAS PRODUTO FROM SC1010 SC1
    WHERE  SC1.D_E_L_E_T_ <> '*'
    AND SC1.C1_NUM = '010211'

    Quando dou um select na tabela  SC1 utilizando a sc = 010211 ele me retorna o seguinte resultado:

    NUM  | ITEM | PRODUTO | PEDIDO_COMPRAS

    001  | 001    | LAMPADA  | 05678

    001  | 002     | BANCO     | 09879

    001  | 003      | CADEIRA |

    001  | 004     | MESA       |

    001  | 005     | NOTEBOOK|

    Porém ao unir com a tabela de pedidos de compras SC7,

    SELECT  '01' EMP, SC1.C1_FILIAL, SC1.C1_NUM, 
    	 SC1.C1_ITEM, SC1.C1_VUNIT, SC1.C1_EMISSAO, 
    	 SC1.C1_PEDIDO, SC1.C1_ITEMPED,  SC7.C7_NUM,   SC7.C7_ITEM, SC7.C7_EMISSAO
    FROM  SC1010 SC1
    LEFT OUTER JOIN SC7010 SC7 ON  SC7.C7_NUM = SC1.C1_PEDIDO 
    	         	  AND SC7.C7_ITEM = SC1.C1_ITEMPED
    WHERE  SC1.D_E_L_E_T_ = '' 
    AND (SC7.D_E_L_E_T_ = '' OR SC7.D_E_L_E_T_ IS NULL)

    Ele me retorna apenas os dois itens da Solicitação de compras que possui pedidos

    NUM  | ITEM | PRODUTO | PEDIDO_COMPRAS

    001  | 001    | LAMPADA  | 05678

    001  | 002     | BANCO     | 09879

    Porém preciso que ele traga todas os resultados

    NUM  | ITEM | PRODUTO | PEDIDO_COMPRAS

    001  | 001    | LAMPADA  | 05678

    001  | 002     | BANCO     | 09879

    001  | 003      | CADEIRA |

    001  | 004     | MESA       |

    001  | 005     | NOTEBOOK|

    sexta-feira, 26 de maio de 2017 20:07
  • Deleted
    sábado, 27 de maio de 2017 16:45
  • Carine,

    A segunda query que você postou onde está retornando o resultado diferente do esperado está diferente da que eu lhe enviei inicialmente.

    tente com essa:

    SELECT  '01' EMP, SC1.C1_FILIAL, SC1.C1_NUM, 
    	 SC1.C1_ITEM, SC1.C1_VUNIT, SC1.C1_EMISSAO, 
    	 SC1.C1_PEDIDO, SC1.C1_ITEMPED,  SC7.C7_NUM,   SC7.C7_ITEM, SC7.C7_EMISSAO
    FROM  SC1010 SC1
    LEFT OUTER JOIN SC7010 SC7 ON  SC7.C7_NUM = SC1.C1_PEDIDO 
    	         	  AND SC7.C7_ITEM = SC1.C1_ITEMPED
    AND SC7.D_E_L_E_T_ = ''
    WHERE  SC1.D_E_L_E_T_ = '' 


    "A vida é um paraíso, mas os homens não o sabem e não se preocupam em sabê-lo." Fiodor Dostoievski

    segunda-feira, 29 de maio de 2017 13:01
  • a tabela SC7010 pode conter vários pedidos para um mesmo item de solicitação?

    - não. A tabela de SC7 tem um pedido com varios itens , sendo que esses itens são referentes as Solicitações

    1 SC tem vários itens , e esses itens podem ser de um mesmo pedido ou pedido diferente.

    Exemplo: A SC 01233, possui 6 itens sendo que esses itens 3 referenciam o mesmo pedido e 2 nãoe um item ainda não foi feito pedido de compra pra ele.

    Numero SC | ITEM SC    | NUMERO PEDIDO  | ITEM do PEDIDO

    01233         | 0001          |10000                   | 004

    01233         | 0002          |10000                   | 005

    01233         | 0003          |10000                   | 006

    01233         | 0004          |10009                    | 001

    01233         | 0005          |10008                   | 007

    01233         | 0006         |                              |

    A tabela SC7 contém os pedidos de compras com seus respectivos itens de compra se o item for proveniente de uma SCompras o campos NUMERO_SC fica preenchido.

    • o que contém as colunas C1_NUM, C1_ITEM, C1_PEDIDO e C1_ITEMPED?

    C1_NUM - numero da solicitação de compras

    C1_item - numero do item da solicitação de compras

    C1_pedido - se a solicitação já existir pedido de compras esse campo estara preenchido

    C1_itemped - campo que informa o numero desse item já no pedido de compra. Só tem informação caso haja pedidos de compras.

    • o que contém as colunas C7_NUM e C7_ITEM?

    C7_num - numero do pedido de compras.

    C7_item - item do pedido de compras.

    ---

    Preciso que no select me traga todas as solicitações que tenham e não tenham pedidos de compras.. :(
    e depois dai vou atras da NF.

    segunda-feira, 29 de maio de 2017 16:41
  • Carine, acredito que o problema não está nessa query que você postou.

    Experimente fazer uns testes com o script abaixo:

    declare @SC1010 table
    (C1_NUM INT, C1_ITEM INT, C1_PEDIDO INT, C1_ITEMPED INT, D_E_L_E_T_ char(1));
    
    insert into @SC1010 values
    (1233, 1, 10000, 4, ''),
    (1233, 2, 10000, 5, ''),
    (1233, 3, 10000, 6, ''),
    (1233, 4, 10009, 1, ''),
    (1233, 5, 10008, 7, ''),
    (1233, 6, null, null, '');
    
    declare @SC7010 table
    (C7_NUM INT, C7_ITEM INT, D_E_L_E_T_ char(1));
    
    insert into @SC7010 values
    (10000, 4, ''),
    (10000, 5, ''),
    (10000, 6, ''),
    (10009, 1, ''),
    (10008, 7, '');
    
    SELECT  
        SC1.C1_NUM, 
        SC1.C1_ITEM,  
        SC1.C1_PEDIDO, 
        SC1.C1_ITEMPED,
        SC7.C7_NUM,   
        SC7.C7_ITEM
    FROM  @SC1010 SC1
    LEFT OUTER JOIN @SC7010 SC7 ON  SC7.C7_NUM = SC1.C1_PEDIDO 
    	         	  AND SC7.C7_ITEM = SC1.C1_ITEMPED
    WHERE  SC1.D_E_L_E_T_ = '' 
    AND (SC7.D_E_L_E_T_ = '' OR SC7.D_E_L_E_T_ IS NULL)

    Espero que ajude


    Assinatura: http://www.imoveisemexposicao.com.br

    segunda-feira, 29 de maio de 2017 17:23
  • Deleted
    • Marcado como Resposta carine.couto terça-feira, 30 de maio de 2017 14:45
    segunda-feira, 29 de maio de 2017 23:22