Duvida ao listar produtos em duas colunas

Dúvidas, dicas e truques de SQL, Select, Update, Delete, cláusulas, operações com joins, Funções em SQLs, etc
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Bom dia galera..

vê se isso é possivel...tenho uma tabela com o nome de PRODUTO e com a coluna DS_PRODUTO e DT_CADASTRO.

Quando eu executo esse select ele me traz uma quantidade de linhas:
select ds_produto from produto where dt_cadastro between '01-jul-2012' and '30-jul-2012'

Quando eu executo esse outro select ele me traz uma outra quantidade de linhas:
select ds_produto from produto where dt_cadastro between '01/08/2012' and '30/08/2012'

eu queria quea uniao desses dois selects me resultasse duas colunas para comparar os valores...
select * from(
select ds_produto from produto where dt_cadastro between '01-jul-2012' and '30-jul-2012'
union all
select ds_produto from produto where dt_cadastro between '01/08/2012' and '30/08/2012'
)

quando eu executo esse select acima ele me retorna uma unica coluna com todos os registros...
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother,

O Union All vai trazer apenas a coluna "ds_produto" das duas queries.
Caso queira identificar quem é quem, adicione um "alias" conforme abaixo e, veja se é isso o que precisa:

Selecionar tudo

select *
  from (select ds_produto, 'Julho_2012' as mês_ref 
          from produto
         where dt_cadastro between '01-jul-2012' and '30-jul-2012'
        union all
        select ds_produto, 'Agosto_2012' as mês_ref 
          from produto
         where dt_cadastro between '01/08/2012' and '30/08/2012')
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Trevisolli , Dessa maneira eu tb consegui...

a dúvida é saber se é possivel retornar a coluna DS_descrição dividida em duas partes..ex:

DS_descrição DS_descrição
aqui fica o retorno aqui fica o retorno
do 1° select do 2° select

queria saber se é possivel exibir em duas colunas...
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Você tem que resolver tudo isso num sql?
Não pode criar uma Temp, com duas colunas, e jogar essas informações nela?
Abraço,
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Hum, boa ideia....

Tem como você dar uma força para criar essa temp?

Há se eu criar a temp quanto tempo ela dura no banco?

Valeu
Trevisolli
Moderador
Moderador
Mensagens: 2016
Registrado em: Qua, 12 Jan 2005 3:25 pm
Localização: Araraquara - SP
Abraço,

Trevisolli
OCA Oracle PL/SQL Developer Certified Associate
OCP Oracle Forms Developer Certified Professional
Araraquara-SP

Brother, sobre a criação, segue um exemplo:

Selecionar tudo

CREATE GLOBAL TEMPORARY TABLE "USUARIO"."PRODUTOS" 
   (	"DS_PRODUTO1" VARCHAR2(100), 
    	"DS_PRODUTO2" VARCHAR2(100)
   ) ON COMMIT DELETE ROWS ;
Quando não se informa a cláusula, ele cria automaticamente a GTT com "ON COMMIT DELETE ROWS", ou seja, após o insert, não faça o COMMIT na transação, senão ele apaga as linhas da GTT.

Sobre a GTT (Global Temporary Table), a estrutura dela é criada fisicamente no teu BD, porém, os registros são da sua sessão, ou seja, saindo da sessão ou comitando-a, os mesmos são eliminados.

Porém, não sei se seria a melhor saída e a mais viável (não sei as permissões que você tem pra criação de objetos etc)... vou deixar o post aberto e verificar ainda a opção via querie.

Abraço,
rogenaro
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Sex, 30 Mar 2007 7:26 pm
Localização: Londrina - PR
Rafael O. Genaro

Seria isso?

Selecionar tudo

select ds_produto
       , max( decode( mês, '2012-07', 1, 0 ) ) existe_2012_07
       , max( decode( mês, '2012-08', 1, 0 ) ) existe_2012_08
from
(
  select ds_produto, dt_cadastro
  from   produto
  where  ( ( dt_cadastro between '01-jul-2012' and '30-jul-2012' )
         or
           ( dt_cadastro between '01/08/2012' and '30/08/2012' )
         )
)
group by ds_produto
Só não acho que os resultados serão satisfatórios..
Se dt_cadastro for do tipo date, use o to_date() para comparar as datas:

Selecionar tudo

dt_cadastro between to_date('01/07/2012','dd/mm/yyyy') and to_date('30/07/2012','ddd/mm/yyyy')
Se o campo for do tipo string mesmo... Filtre antes as datas usando o like ou regexp_like, e compare usando o to_date() na coluna dt_cadastro, pois a comparação está sendo realizado como texto, e o between provavelmente não irá trazer as informações que você espera.
douglasmattos
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 75
Registrado em: Seg, 19 Mar 2012 2:28 pm

Valeu pelas dicas....

vou fazer uns testes aqui...
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 15 visitantes