Em 01/10/13, Thiago<[email protected]> escreveu:
> On 01/10/2013 13:49, JotaComm wrote:
>> Opa,
>>
>>
>> Em 1 de outubro de 2013 12:37, Thiago <[email protected]
>> <mailto:[email protected]>> escreveu:
>>
>>     On 01/10/2013 11:10, JotaComm wrote:
>>
>>         Opa,
>>
>>
>>         Em 1 de outubro de 2013 10:50, Thiago
>>         <[email protected]
>>         <mailto:[email protected]>
>>         <mailto:[email protected].__br
>>         <mailto:[email protected]>>>
>>         escreveu:
>>
>>
>>              Bom dia a todos.
>>
>>              Tenho as seguintes tabelas
>>
>>              tb_venda
>>              loja venda
>>              1    10
>>              2    20
>>
>>              tb_meta
>>              loja meta
>>              2    40
>>              3    60
>>
>>              Eu precisava fazer uma consulta trazendo tudo de tudo, o
>>         que cruzar
>>              e o que não cruzar, para tal fiz o seguinte sql.
>>
>>              select
>>                  coalesce(a.loja,b.loja) as loja,
>>                  coalesce(a.venda,0) as venda,
>>                  coalesce(b.meta,0) as meta
>>              from tb_venda a
>>              full outer join tb_meta b on a.loja = b.loja
>>
>>              Como resultado eu teria os seguintes dados:
>>              loja venda meta
>>              1    10    0
>>              2    20    40
>>              3    0     60
>>
>>              O que fazer quando eu não tenho registros na tabela
>>         tb_venda, tenho
>>              apenas na tabela meta?
>>
>>              Gostaria que viesse o seguinte resultado:
>>
>>              loja venda meta
>>              2    0     40
>>              3    0     60
>>
>>
>>         Não conseguei entender exatamente o que você quer: Por que a
>>         loja 1 não
>>         deve aparecer no resultado? Pelo que vi aparecem somente os
>>         registros da
>>         tabela tb_meta.
>>
>>
>>              Obrigado pela ajuda.
>>
>>              ___________________________________________________
>>              pgbr-geral mailing list
>>
>>         [email protected].____org.br
>>         <http://org.br>
>>              <mailto:pgbr-geral@listas.__postgresql.org.br
>>         <mailto:[email protected]>>
>>
>> https://listas.postgresql.org.____br/cgi-bin/mailman/listinfo/____pgbr-geral
>>
>>
>>
>> <https://listas.postgresql.__org.br/cgi-bin/mailman/__listinfo/pgbr-geral
>>
>> <https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral>>
>>
>>
>>
>>         Abraços
>>         --
>>         JotaComm
>>         http://jotacomm..wordpress.com <http://jotacomm.wordpress.com>
>>
>>
>>     JotaComm, boa tarde.
>>
>>     Eu questionei no caso de tabela tb_venda estar vazia, como faria
>>     para trazer os registros da tb_meta. Como se eu tivesse a seguinte
>>     estrutura:
>>
>>     tb_venda
>>     loja venda
>>
>>
>>     tb_meta
>>     loja meta
>>     2    40
>>     3    60
>>
>>     Preciso ter o resultado abaixo utilizando a tabela tb_venda como
>>     esquerda (principal).
>>
>>
>>     loja venda meta
>>     2    0     40
>>     3    0     60
>>
>>     Acontece que em determinados momentos a mesma pode estar vazia e
>>     neste caso não está trazendo as metas.
>>
>>
>> Ainda não consegui entender (Confuso ainda): Por exemplo, na tabela
>> tb_venda não tem o código 3, porém você quer que apareça no resultado,
>> logo se você usar a tabela tb_venda como principal isso não vai
>> acontecer (LEFT OUTER JOIN).
>>
>> Existem alguma relação entre a coluna meta de tb_meta e a coluna venda
>> de tb_venda. Algo como se o valor de meta (tb_meta) for maior ou igual a
>> venda (tb_venda)?
>>
>>
>>     Obrigado!
>>
>>
>>     _________________________________________________
>>     pgbr-geral mailing list
>>     [email protected].__org.br
>>     <mailto:[email protected]>
>>
>> https://listas.postgresql.org.__br/cgi-bin/mailman/listinfo/__pgbr-geral
>>
>> <https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral>
>>
>>
>>
>> Abraços
>> --
>> JotaComm
>> http://jotacomm.wordpress.com
>>
>>
>
> Não, na verdade o campo de referencia é o loja. É que quando comecei a
> utilizar o left outer join eu imaginei que ele traria de qualquer dos
> lados, mas viajei.
>
> Vou criar uma subconsulta com union nas tabelas antes de cruzar,
> acredito ser a melhor solução. Algo como:
>
> select tm.loja
> from (
>    select loja from tb_venda
>    union all
>    select loja from tb_meta
> ) as tm
> group by tm.loja
>
> E depois utilizar o resultado disso para cruzar com as outras.
>


Não vejo sentido em utilizar o GROUP BY nesta consulta, é só eliminar
a opção ALL da UNION [1].

select loja from tb_venda
   union
select loja from tb_meta;

Osvaldo

[1] http://www.postgresql.org/docs/current/interactive/queries-union.html
"query1 UNION [ALL] query2
UNION effectively appends the result of query2 to the result of query1
(although there is no guarantee that this is the order in which the
rows are actually returned). Furthermore, it eliminates duplicate rows
from its result, in the same way as DISTINCT, unless UNION ALL is
used."
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a