[URGENTE] Agrupar registros de 2 tabelas diferentes
09/08/2013
0
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
Posts
09/08/2013
Luis Flores
CodEsc | CodigoPessoa | CodigoPessoa |
2 | 134 | 516
CodEsc | CodigoPessoa
2 | 134
2 | 516
09/08/2013
Alex Lekao
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
09/08/2013
Luis Flores
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
09/08/2013
Alex Lekao
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.
10/08/2013
Alex Lekao
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.
12/08/2013
Luis Flores
essa select ta foda kkk
12/08/2013
Daniel Costa
12/08/2013
Daniel Costa
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
12/08/2013
Deivison Melo
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
12/08/2013
Luis Flores
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.
19/08/2013
Ignez Mello
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
Clique aqui para fazer login e interagir na Comunidade :)