[URGENTE] Agrupar registros de 2 tabelas diferentes

09/08/2013

0

Olá pessoal,
bom, eu tenho a seguinte ocasião:
2 tabelas

ESCRITURA :
Codigo,
Descricao,
...
e
ESCRITURAPESSOA :
Codigo,
CodEsc,
CodigoPessoa,
..
ou seja eu poderei ter várias pessoas para uma escritura, então eu gostaria de uma select que traga o seguinte resultado se possivel:
OBS: Simulação com duas pessoas para uma Escritura.

CodEsc | CodigoPessoa | CodigoPessoa |
2 134 516

pois atualmente a select que eu estou fazendo está trazendo assim :

CodEsc | CodigoPessoa
2 134
2 516

Espero terem entendido minha explicação, desde já agradeço pessoal.
Fico no aguardo de ajuda.
Luis Flores

Luis Flores

Responder

Posts

09/08/2013

Luis Flores

correção :

CodEsc | CodigoPessoa | CodigoPessoa |
2 | 134 | 516



CodEsc | CodigoPessoa
2 | 134
2 | 516
Responder

09/08/2013

Alex Lekao

Ola Luis, Boa tarde!!!

Tente assim para ver se funcina.

select
e.CodEsc,
ep.CodigoPessoa,
ep.CodigoPessoa
from escritura as e
left join escriturapessoa as ep on ep.codesc = e.codigo

nao sei se seria exatamente isso.

se tivesse a estrutura melhor da tabela talvez ficasse mais tranquilo para ajustar.

Espero ter ajudado.

Abraco.

Alex - Lekao
Responder

09/08/2013

Luis Flores

Alex, valeu pela ajuda,
mas ainda continua me trazendo o mesmo resultado
é que assim na verdade eu queria mostrar em uma linha de registro apenas o código da escritura, e ao lado o codigo das pessoas envolvidas seja quantas forem
entende ?

valeu
Responder

09/08/2013

Alex Lekao

entendi...

tente mudar o left para inner e ve se funciona.

sem uma estruta mais clara da tabela fica mais dificil.

mas eu entendi que seria aquilo.

aqui na empresa faco esse tipo de coisa com uma certa frequencia.

vamos ver se conseguimos chegar em algo que resolva.

mude o left para inner e ve se funciona.
Responder

10/08/2013

Luis Flores

ainda assim, continua a mesma =(
Responder

10/08/2013

Alex Lekao

Oi Luis, bom dia!!!

Tenta assim e ve se funciona.

select
e.codigo,
ep.codigopessoa
from escritura as e
left join escriturapessoa as ep on ep.codesc = e.codigo]
group by e.codigo,ep.codigopessoa

Nao sei se esta igual ao anterior mas tudo bem.
Responder

12/08/2013

Luis Flores

ainda assim obtive o mesmo resultado anterior,
essa select ta foda kkk
Responder

12/08/2013

Daniel Costa

Vê se eu entendi se a escritura tiver 3 pessoas serão 3 colunas com os códigos da pessoas ????

Responder

12/08/2013

Daniel Costa

Fim um cara aqui rápido pelo menos para dar uma luz

Onde estão as variáveis do tipo table use sua tabela

A saída pra isso é usar PIVOT..

Abraços

declare @ESCRITURA table (codigo varchar(20), escritura varchar(20))
declare @ESCRITURAPESSOA table (codesc varchar(20), codpessoa varchar(20))

insert into @ESCRITURA
(codigo)
values
('1')
,('2')
,('3')

insert into @ESCRITURAPESSOA
(codesc, codpessoa)
values
('1','abc')
,('2','def')
,('3','ghi')
,('1','jkl')
,('2','mno')
,('3','pqr')
,('1','stu')

select codesc, codpessoa1, codpessoa2,codpessoa3 from
(select
'CodPessoa' + convert(varchar,ROW_NUMBER() over (partition by codesc order by codpessoa)) as rw
, codesc
, codpessoa
from
@ESCRITURAPESSOA) as res
pivot
(
max(codpessoa)
for
rw in (codpessoa1, codpessoa2, codpessoa3)
) as pivotPessoa
Responder

12/08/2013

Deivison Melo

Boa tarde,

Além dos join você também pode utilizar union (union all) e depois agrupar as informações.

Dá uma olhada também nos link´s abaixo:

https://www.devmedia.com.br/10-dicas-para-classificar-agrupar-e-sumarizar-dados-em-sql/27555

http://social.msdn.microsoft.com/Forums/sqlserver/pt-BR/05f5f945-c240-4ec9-9a55-1d34448b8d5f/duvida-agrupar-informaoes
Responder

12/08/2013

Luis Flores

Daniel Luiz
Obrigado pela ajuda, mas na verdade uma escritura pode não ter apenas 3 pessoas esse número é bem relativo
mas sería quase isso.
Responder

19/08/2013

Ignez Mello

Oi Luiz,

Eu desenvolvi um código para atender um problema bem semelhante ao seu. Tive que apelas para variáveis, porque o assunto em foco (vendedores por loja) variava quase diariamente. :-p

Eu aproveitei o código acima, e fiz alguns ajustes para adaptá-lo ao meu código. Também acrescentei mais algumas pessoas por contrato. Faça um teste, variando o conteúdo da tabela #EscrituraPessoa, e veja se atende sua necessidade.



DROP TABLE #ESCRITURA
DROP TABLE #ESCRITURAPESSOA

CREATE TABLE #ESCRITURA (codigo varchar(20), #ESCRITURA varchar(20))
CREATE TABLE #ESCRITURAPESSOA (codesc varchar(20), codpessoa varchar(20))

DECLARE @Conta TINYINT = 1 ,
@Colunas NVARCHAR(150) = '',
@Query NVARCHAR(500)

insert into #ESCRITURA (codigo)
values ('1'),('2'),('3')

insert into #ESCRITURAPESSOA (codesc, codpessoa)
values
('1','abc')
,('3','ghi')
,('1','jkl')
,('2','mno')
,('3','pqr')
,('1','stu')
,('1','xyz')
,('2','abc')
,('3','def')
,('1','ghi')
,('2','jkl')
,('3','mno')
,('1','pqr')
,('2','stu')
,('2','xyz')
,('1','aaa')
,('1','bbb')

WHILE (select TOP 1 COUNT(1) from #ESCRITURAPESSOA group by codesc order by 1 desc) >= @Conta
BEGIN
SET @Colunas = @Colunas + ', codpessoa' + CAST(@Conta AS VARCHAR(3))
SET @Conta += 1
END

SET @Query = N'select codesc' + @Colunas + ' from
(select
''CodPessoa'' + convert(varchar,ROW_NUMBER() over (partition by codesc order by codpessoa)) as rw
, codesc
, codpessoa
from
#ESCRITURAPESSOA) as res
pivot
(
max(codpessoa)
for
rw in (' + STUFF(@Colunas,1,1,'') + ')
) as pivotPessoa'

EXECUTE(@Query)
go

Abraços,

Ignez
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar