Array
(
)

[URGENTE] Agrupar registros de 2 tabelas diferentes

Luis Flores
   - 09 ago 2013

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
   - 09 ago 2013

correção :

CodEsc | CodigoPessoa | CodigoPessoa |
2 | 134 | 516

CodEsc | CodigoPessoa
2 | 134
2 | 516

Alex Lekao
   - 09 ago 2013

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

Luis Flores
   - 09 ago 2013

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

Alex Lekao
   - 09 ago 2013

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.

Luis Flores
   - 10 ago 2013

ainda assim, continua a mesma =(

Alex Lekao
   - 10 ago 2013

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.

Luis Flores
   - 12 ago 2013

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

Daniel Costa
   - 12 ago 2013

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

Daniel Costa
   - 12 ago 2013

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

Emanoel Deivison
   - 12 ago 2013

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:

http://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

Luis Flores
   - 12 ago 2013

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.

Ignez
|
MVP
    19 ago 2013

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