Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Clauser

Mesclar Tabelas

Recommended Posts

Ola,Gostaria de saber se eh possivel criar uma SP para mesclar duas tabelas (por exemplo: tbEmpresas, tbFuncionarios ).Usando 'UNION' eu sei que mescla, mas exige que o numero de colunas sejam iguais.Precisaria ter uma tabela de retorno da seguinte maneira:------------------------------------------------Empresa1------------------------------------------------Funcionario11 Fone11------------------------------------------------Funcionario12 Fone12------------------------------------------------Funcionario13 Fone13------------------------------------------------Empresa2------------------------------------------------Funcionario21 Fone21------------------------------------------------Funcionario22 Fone22------------------------------------------------Empresa3------------------------------------------------Funcionario31 Fone31------------------------------------------------Funcionario32 Fone32------------------------------------------------Funcionario33 Fone33------------------------------------------------

Compartilhar este post


Link para o post
Compartilhar em outros sites

czt, o UNION tem q ter o msm numero de colunas, veja este post sobre UNION e UNION ALL: http://forum.iMasters.com.br/index.php?showtopic=2723

 

uma forma de você fazer desta forma ae, seria criar uma tabela virtual na proc, inserir os valores na table virtual e fazer o select nela

 

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

não não :rolleyes:

ate essa parte eu conheço!

 

eu precisa agrupar o resultado do da minha consulta

 

aqui estah ele exatamente:

 

-----------------------------------------------------------------------------------------------------------------------------------------


if (@gerado like 'jan/%' or @gerado like 'fev/%' or @gerado like 'mar/%' or @gerado like 'abr/%' or @gerado like 'maio/%' or @gerado like 'jun/%')

begin

set @mesm = 'jan/'+ RIGHT(@gerado,4)

set @mes1 = 'fev/'+ RIGHT(@gerado,4)

set @mes2 = 'mar/'+ RIGHT(@gerado,4)

set @mes3 = 'abr/'+ RIGHT(@gerado,4)

set @mes4 = 'mai/'+ RIGHT(@gerado,4)

set @mes5 = 'jun/'+ RIGHT(@gerado,4)

end

else

begin

set @mesm = 'jul/'+ RIGHT(@gerado,4)

set @mes1 = 'ago/'+ RIGHT(@gerado,4)

set @mes2 = 'set/'+ RIGHT(@gerado,4)

set @mes3 = 'out/'+ RIGHT(@gerado,4)

set @mes4 = 'nov/'+ RIGHT(@gerado,4)

set @mes5 = 'dez/'+ RIGHT(@gerado,4)

end

 

select curso, turno, periodo, plano, Matricula, nome,

(case when competencia = @mesm then valor end) as mensm ,

(case when competencia = @mes1 then valor end) as mens1 ,

(case when competencia = @mes2 then valor end) as mens2,

(case when competencia = @mes3 then valor end) as mens3,

(case when competencia = @mes4 then valor end) as mens4,

(case when competencia = @mes5 then valor end) as mens5

from prereceita

where

competencia = @mesm

union

select curso, periodo, turno, plano, Matricula, nome,

(case when competencia = @mesm then valor end) as mensm,

(case when competencia = @mes1 then valor end) as mens1,

(case when competencia = @mes2 then valor end) as mens2,

(case when competencia = @mes3 then valor end) as mens3,

(case when competencia = @mes4 then valor end) as mens4,

(case when competencia = @mes5 then valor end) as mens5

from prereceita

where

competencia = @mes1

union

select curso, periodo, turno, plano, Matricula, nome,

(case when competencia = @mesm then valor end) as mensm ,

(case when competencia = @mes1 then valor end) as mens1 ,

(case when competencia = @mes2 then valor end) as mens2,

(case when competencia = @mes3 then valor end) as mens3,

(case when competencia = @mes4 then valor end) as mens4,

(case when competencia = @mes5 then valor end) as mens5

from prereceita

where

competencia = @mes2

union

select curso, periodo, turno, plano, Matricula, nome,

(case when competencia = @mesm then valor end) as mensm ,

(case when competencia = @mes1 then valor end) as mens1 ,

(case when competencia = @mes2 then valor end) as mens2,

(case when competencia = @mes3 then valor end) as mens3,

(case when competencia = @mes4 then valor end) as mens4,

(case when competencia = @mes5 then valor end) as mens5

from prereceita

where

competencia = @mes3

union

select curso, periodo, turno, plano, Matricula, nome,

(case when competencia = @mesm then valor end) as mensm ,

(case when competencia = @mes1 then valor end) as mens1 ,

(case when competencia = @mes2 then valor end) as mens2,

(case when competencia = @mes3 then valor end) as mens3,

(case when competencia = @mes4 then valor end) as mens4,

(case when competencia = @mes5 then valor end) as mens5

from prereceita

where

competencia = @mes4

union

select curso, periodo, turno, plano, Matricula, nome,

(case when competencia = @mesm then valor end) as mensm ,

(case when competencia = @mes1 then valor end) as mens1 ,

(case when competencia = @mes2 then valor end) as mens2,

(case when competencia = @mes3 then valor end) as mens3,

(case when competencia = @mes4 then valor end) as mens4,

(case when competencia = @mes5 then valor end) as mens5

from prereceita

where

competencia = @mes5

 

order by curso, turno, periodo, plano, nome _linenums:0'>declare @mesm varchar(10) declare @mes1 varchar(10) declare @mes2 varchar(10) declare @mes3 varchar(10) declare @mes4 varchar(10) declare @mes5 varchar(10) declare @gerado varchar(10) set @gerado = 'jan/2001' if (@gerado like 'jan/%' or @gerado like 'fev/%' or @gerado like 'mar/%' or @gerado like 'abr/%' or @gerado like 'maio/%' or @gerado like 'jun/%') begin set @mesm = 'jan/'+ RIGHT(@gerado,4) set @mes1 = 'fev/'+ RIGHT(@gerado,4) set @mes2 = 'mar/'+ RIGHT(@gerado,4) set @mes3 = 'abr/'+ RIGHT(@gerado,4) set @mes4 = 'mai/'+ RIGHT(@gerado,4) set @mes5 = 'jun/'+ RIGHT(@gerado,4) end else begin set @mesm = 'jul/'+ RIGHT(@gerado,4) set @mes1 = 'ago/'+ RIGHT(@gerado,4) set @mes2 = 'set/'+ RIGHT(@gerado,4) set @mes3 = 'out/'+ RIGHT(@gerado,4) set @mes4 = 'nov/'+ RIGHT(@gerado,4) set @mes5 = 'dez/'+ RIGHT(@gerado,4) end select curso, turno, periodo, plano, Matricula, nome, (case when competencia = @mesm then valor end) as mensm , (case when competencia = @mes1 then valor end) as mens1 , (case when competencia = @mes2 then valor end) as mens2, (case when competencia = @mes3 then valor end) as mens3, (case when competencia = @mes4 then valor end) as mens4, (case when competencia = @mes5 then valor end) as mens5 from prereceita where competencia = @mesm union select curso, periodo, turno, plano, Matricula, nome, (case when competencia = @mesm then valor end) as mensm, (case when competencia = @mes1 then valor end) as mens1, (case when competencia = @mes2 then valor end) as mens2, (case when competencia = @mes3 then valor end) as mens3, (case when competencia = @mes4 then valor end) as mens4, (case when competencia = @mes5 then valor end) as mens5 from prereceita where competencia = @mes1 union select curso, periodo, turno, plano, Matricula, nome, (case when competencia = @mesm then valor end) as mensm , (case when competencia = @mes1 then valor end) as mens1 , (case when competencia = @mes2 then valor end) as mens2, (case when competencia = @mes3 then valor end) as mens3, (case when competencia = @mes4 then valor end) as mens4, (case when competencia = @mes5 then valor end) as mens5 from prereceita where competencia = @mes2 union select curso, periodo, turno, plano, Matricula, nome, (case when competencia = @mesm then valor end) as mensm , (case when competencia = @mes1 then valor end) as mens1 , (case when competencia = @mes2 then valor end) as mens2, (case when competencia = @mes3 then valor end) as mens3, (case when competencia = @mes4 then valor end) as mens4, (case when competencia = @mes5 then valor end) as mens5 from prereceita where competencia = @mes3 union select curso, periodo, turno, plano, Matricula, nome, (case when competencia = @mesm then valor end) as mensm , (case when competencia = @mes1 then valor end) as mens1 , (case when competencia = @mes2 then valor end) as mens2, (case when competencia = @mes3 then valor end) as mens3, (case when competencia = @mes4 then valor end) as mens4, (case when competencia = @mes5 then valor end) as mens5 from prereceita where competencia = @mes4 union select curso, periodo, turno, plano, Matricula, nome, (case when competencia = @mesm then valor end) as mensm , (case when competencia = @mes1 then valor end) as mens1 , (case when competencia = @mes2 then valor end) as mens2, (case when competencia = @mes3 then valor end) as mens3, (case when competencia = @mes4 then valor end) as mens4, (case when competencia = @mes5 then valor end) as mens5 from prereceita where competencia = @mes5 order by curso, turno, periodo, plano, nome

-----------------------------------------------------------------------------------------------------------------------------------------

 

vlw ai http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

mas preciso agrupar esses dados

 

t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já tentou fazer por tabela temporaria?!;)

Concordo com o jus2ka ! O pessoal da administração aqui onde trabalho sempre sugerem o uso de tabelas temporárias para evitar UNION.Bom mas isto é fácil de testar. você pode implementar as duas soluções (UNION e tabela temporária) e verificar pelo plano de execução qual o mehor performance.t+

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.