none
Dúvida na consulta - Select RRS feed

  • Pergunta

  • Ola amigos!!!

     

    Estou com uma dúvida em um select e não sei como vocês fazem mas já vi aqui no forum, tipo o Maia ou o Galvão que fazem as consultas tão simples que passo horas tentando fazer uma aqui e acabo usando recursos como Cursor que acabam com a performance do relatorio.

     

    Se puderem me ajudar ficarei muito grato.

     

    Preciso fazer um relatorio que traga todas as contas que não tiveram cotação.

     

    Vamos supor, na tabela tem essas informações:

     

    |Cotacao                              |Cliente                                                 CNPJ
    -----------------------------------------  -------------------------------------------------------     ----------------------------------
    |NULL                                  |ADVOCACIA BELLINATI PEREZ S/C      001.001.001/0010-01
    |PRO-03331-LIVR                 |ADVOCACIA BELLINATI PEREZ S/C      001.001.001/0011-01
    |PRO-01677-B8TQ                |ABAC Associação Brasileira de Adm      0088800000/0001-01
    |NULL                                  |Optima do Brasil Maquinas de Embal      0008800000/0001-01

    |PRO-01689-E9HY                |OPENSIS TECHNOLOGY & INFORM     0070082080/0001-01
    |NULL                                  |Balluff Controles Eletricos Ltda               0000220000/0001-01
    |NULL                                  |Asten & Cia Ltda                                   0001000100/0001-01

     

    Apensa coloquei uma condição informando que "se cotacao for is null ele não puxa, só que tem casos que, como por exemplo, o cliente ADVOCACIA BELLINATI PEREZ S/C do primeiro item tem cotacao e a filial dele nao tem cotação, ou seja... nao precisa pegar esse cliente pq alguma filial dele ja teve cotacao entao nao entra no relatorio.

     

    []'s

     

    Clayton Santos

    quinta-feira, 4 de setembro de 2008 20:52

Respostas

  • Oi Clayton, em relação a fazer querys parecerem simples é questão de prática e bastante estudo véio... mas não se preocupa não que você chega lá, Os caras são feras mesmo...

     

    O Junior já ta com cabelo branco, e o Gustavo ja ta chegando lá, :-),

     

    Brancadeiras a parte... tai veja se ajuda...

     

    Code Snippet

    --Cotacao |Cliente CNPJ

    --|NULL |ADVOCACIA BELLINATI PEREZ S/C 001001.001/0010-01

    --|PRO-03331-LIVR |ADVOCACIA BELLINATI PEREZ S/C 001001.001/0011-01

    --|PRO-01677-B8TQ |ABAC Associação Brasileira de Adm 0088800000/0001-01

    --|NULL |Optima do Brasil Maquinas de Embal 0008800000/0001-01

    --|PRO-01689-E9HY |OPENSIS TECHNOLOGY & INFORM 0070082080/0001-01

    --|NULL |Balluff Controles Eletricos Ltda 0000220000/0001-01

    --|NULL |Asten & Cia Ltda 0001000100/0001-01

    DECLARE @TAB TABLE(Cotacao VarChar(80), Cliente VarChar(200), CNPJ VarChar(20))

    INSERT INTO @TAB VALUES(NULL, 'ADVOCACIA BELLINATI PEREZ S/C', '001.001.001/0010-01')

    INSERT INTO @TAB VALUES('PRO-03331-LIVR', 'ADVOCACIA BELLINATI PEREZ S/C', '001.001.001/0011-01')

    INSERT INTO @TAB VALUES('PRO-01677-B8TQ', 'ABAC Associação Brasileira de Adm', '0088800000/0001-01')

    INSERT INTO @TAB VALUES(NULL, 'Optima do Brasil Maquinas de Embal', '0008800000/0001-01')

    INSERT INTO @TAB VALUES('PRO-01689-E9HY', 'OPENSIS TECHNOLOGY & INFORM', '0070082080/0001-01')

    INSERT INTO @TAB VALUES(NULL, 'Balluff Controles Eletricos Ltda', '0000220000/0001-01')

    INSERT INTO @TAB VALUES(NULL, 'Asten & Cia Ltda', '0001000100/0001-01')

    -- Sua consulta

    SELECT Tab.*

    FROM @Tab Tab

    WHERE Tab.Cotacao IS NULL

    -- Pode usar essa

    SELECT Tab.*

    FROM @Tab Tab

    WHERE Tab.Cotacao IS NULL

    AND NOT EXISTS(SELECT 1

    FROM @Tab Tab1

    WHERE Tab.Cliente = Tab1.Cliente

    AND Cotacao IS NOT NULL)

    -- Ou essa tanto faz...

    SELECT Tab.*

    FROM @Tab Tab

    LEFT OUTER JOIN @Tab Tab1

    ON Tab.Cliente = Tab1.Cliente

    AND Tab1.Cotacao IS NOT NULL

    WHERE Tab.Cotacao IS NULL

    AND Tab1.Cliente IS NULL

     

     

     

    quinta-feira, 4 de setembro de 2008 21:28

Todas as Respostas

  • Oi Clayton, em relação a fazer querys parecerem simples é questão de prática e bastante estudo véio... mas não se preocupa não que você chega lá, Os caras são feras mesmo...

     

    O Junior já ta com cabelo branco, e o Gustavo ja ta chegando lá, :-),

     

    Brancadeiras a parte... tai veja se ajuda...

     

    Code Snippet

    --Cotacao |Cliente CNPJ

    --|NULL |ADVOCACIA BELLINATI PEREZ S/C 001001.001/0010-01

    --|PRO-03331-LIVR |ADVOCACIA BELLINATI PEREZ S/C 001001.001/0011-01

    --|PRO-01677-B8TQ |ABAC Associação Brasileira de Adm 0088800000/0001-01

    --|NULL |Optima do Brasil Maquinas de Embal 0008800000/0001-01

    --|PRO-01689-E9HY |OPENSIS TECHNOLOGY & INFORM 0070082080/0001-01

    --|NULL |Balluff Controles Eletricos Ltda 0000220000/0001-01

    --|NULL |Asten & Cia Ltda 0001000100/0001-01

    DECLARE @TAB TABLE(Cotacao VarChar(80), Cliente VarChar(200), CNPJ VarChar(20))

    INSERT INTO @TAB VALUES(NULL, 'ADVOCACIA BELLINATI PEREZ S/C', '001.001.001/0010-01')

    INSERT INTO @TAB VALUES('PRO-03331-LIVR', 'ADVOCACIA BELLINATI PEREZ S/C', '001.001.001/0011-01')

    INSERT INTO @TAB VALUES('PRO-01677-B8TQ', 'ABAC Associação Brasileira de Adm', '0088800000/0001-01')

    INSERT INTO @TAB VALUES(NULL, 'Optima do Brasil Maquinas de Embal', '0008800000/0001-01')

    INSERT INTO @TAB VALUES('PRO-01689-E9HY', 'OPENSIS TECHNOLOGY & INFORM', '0070082080/0001-01')

    INSERT INTO @TAB VALUES(NULL, 'Balluff Controles Eletricos Ltda', '0000220000/0001-01')

    INSERT INTO @TAB VALUES(NULL, 'Asten & Cia Ltda', '0001000100/0001-01')

    -- Sua consulta

    SELECT Tab.*

    FROM @Tab Tab

    WHERE Tab.Cotacao IS NULL

    -- Pode usar essa

    SELECT Tab.*

    FROM @Tab Tab

    WHERE Tab.Cotacao IS NULL

    AND NOT EXISTS(SELECT 1

    FROM @Tab Tab1

    WHERE Tab.Cliente = Tab1.Cliente

    AND Cotacao IS NOT NULL)

    -- Ou essa tanto faz...

    SELECT Tab.*

    FROM @Tab Tab

    LEFT OUTER JOIN @Tab Tab1

    ON Tab.Cliente = Tab1.Cliente

    AND Tab1.Cotacao IS NOT NULL

    WHERE Tab.Cotacao IS NULL

    AND Tab1.Cliente IS NULL

     

     

     

    quinta-feira, 4 de setembro de 2008 21:28
  • Oi Pessoal,

     

    Eu espero que os cabelos brancos ainda demorem bastante (rs). Não cheguei nem nos 30 ainda...

     

    Acredito que as soluções do Fabiano (adequadas por sinal) funcionaram para o problema.

     

    [ ]s,

     

    Gustavo

    quinta-feira, 4 de setembro de 2008 22:14
  • Ola Fabiano, como vai cara?

     

    Perfect!!! Eu dei uma estudada no seu script e entendi e consegui aplica-lo em minha query, ele está trazendo agora somente as contas que realmente nao teve mesmo cotação.

     

    Muito obrigado pela ajuda!

     

    OBS: Espero ficar tão bom quanto vocês antes de ficar com cabelos brancos rsrsrssr... (brincadeira).

     

    Abraços!

     

    Clayton Santos

     

    segunda-feira, 8 de setembro de 2008 13:59