Relacionar duas tabelas e agrupar por um campo

06/11/2019

12

Tenho duas tabelas que estou unindo para recuperar os dados relacionados dessa forma:

Tabela Processos: Tabela Anexos

id  |  processos              processoid  |  titulo         

1   |  Processo 1             1           |  REQUERIMENTO 
2   |  Processo 2             1           |  Apostilamento
3   |  Processo 3             2           |  requisição
4   |  Processo 4             2           |  REQUERIMENTO  
5   |  Processo 5             3           |  Apostilamento
6   |  Processo 6             3           |  CRAF



SELECT processos.processos, processos.id as processoid, anexos.*, anexos.id as anexoid FROM anexos INNER JOIN processos ON (processos.id = anexos.processoid) GROUP By processos.id ORDER By anexos.processoid


Com a query acima ele retorna da seguinte forma:


Processo 1 => REQUERIMENTO
Processo 1 => Apostilamento

Processo 2 => requisição
Processo 2 => REQUERIMENTO

Processo 3 => Apostilamento
Processo 3 => CRAF


O que preciso está abaixo:


Processo 1 => REQUERIMENTO
Apostilamento

Processo 2 => requisição
REQUERIMENTO

Processo 3 => Apostilamento
CRAF


Creio que é só o uso do GROUP BY mas nesse caso nao funciona.
Responder

Posts

14/01/2020

Vinicíus Neto

UPDATE estoque
SET estoque.teste = (select est.qtoba
FROM est where est.codigo = estoque.codigo)

Segui este exemplo pra copiar os dados da coluna est.qtoba pra coluna estoque.teste, mas resulta em null em todas as linhas, o que pode estar acontecendo, o dados de este estão perfeitos que já observei no select, mas eles não gravam na coluna teste.
Pode me ajudar?

Grato
Responder
Fala boy,

Seguinte...

Você está com o relacionamento de forma errada, veja que você tem uma tabela PROCESSOS, outra com o nome de ANEXO e não tem uma tabela de ligação entre elas e nesse seu exemplo é necessário.


PROCESSO
PRCCODIGO INT NOTNULL PK
PRCDESCRICAO VARCHAR(30) NOTNULL

ANEXO
ANXCODIGO INT NOTNULL PK
ANXDESCRICAO VARCHAR(30) NOTNULL

TABELA DE LIGAÇÃO NECESSÁRIA
PROCESSO_ANEXO
PRCANXCODIGO INT NOTNULL PK
PRCCODIGO INT NOTNULL FK
ANXCODIGO INT NOTNULL FK

OBS1:
EXISTEM TÉCNICAS A SE SEGUIR, UMA DELAS É A MAIS SIMPLES, OU VOCÊ USA OS NOMES DAS TABELAS EM SINGULAR OU PLURAL, NÃO PODE VARIAR O TEMPO TODO, PADRÃO PALAVRA DE ORDEM PARA INFORMÁTICA.

OBS2:
NOMENCLATURA DE CAMPOS É NECESSÁRIO PARA QUE ALGUM DIA VOCÊ POSSA CONTAR COM ALGUÉM PARA AJUDAR VOCÊ, SE NÃO HOUVER UM PADRÃO DE NOMENCLATURA DOS CAMPOS O PROGRAMADOR VAI SE PERDER E NÃO VAI CONSEGUIR AJUDAR TÃO FÁCIL, ATÉ MESMO VOCÊ PODE SE PERDER SE NÃO TIVER PADRÃO, COM O TEMPO QUE VOCÊ NÃO MEXER NO PROGRAMA VOCÊ VAI ESQUECER O QUE VOCÊ ABREVIOU.

SEGUINDO...

PROCESSO
COD - DESCRICAO
1. PROCESSO 1
2. PROCESSO 2
3. PROCESSO 3
4. PROCESSO 4
5. PROCESSO 5
6. PROCESSO 6

ANEXO
COD - DESCRICAO
1. APOSTILAMENTO
2. REQUISIÇÃO
3. CRAF

PROCESSO_ANEXO
COD(SEQ) CODPROCESSO CODANEXO
1. - 2. PROCESSO 2 - 1. APOSTILAMENTO
2. - 3. PROCESSO 3 - 2. REQUISIÇÃO
3. - 4. PROCESSO 4 - 2. REQUISIÇÃO
4. - 5. PROCESSO 5 - 3. CRAF
5. - 6. PROCESSO 6 - 3. CRAF
6. - 2. PROCESSO 2 - 2. REQUISIÇÃO
7. - 2. PROCESSO 2 - 3. CRAF

//-- OBSERVE QUE A SUA LEGENDA ESTÁ INCORRETA E EU INCREMENTEI MAIS CAMPOS PARA EXEMPLIFICAR MELHOR --
REQUERIMENTO
2 | Processo 2 1 | Apostilamento
3 | Processo 3 2 | requisição
4 | Processo 4 2 | REQUERIMENTO
5 | Processo 5 3 | Apostilamento
6 | Processo 6 3 | CRAF
// -------------------------------------------------------

Agora sim vamos lá.

Faça:

select
proc.*,
anx.*,
panexo.prcanxcodigo
from
processo_anexo panexo
inner join processo proc
on proc.prccodigo = panexo.prccodigo
inner join anexo anx
on anx.anxcodigo = panexo.anxcodigo
order by proc.prcdescricao, anx.anxdescricao



Você terá o resultado:

PRCCODIGO PRCDESCRICAO ANXCODIGO ANXDESCRICAO PRCANXCODIGO
2 PROCESSO 2 1 APOSTILAMENTO 1
2 PROCESSO 2 3 CRAF 7
2 PROCESSO 2 2 REQUISIÇÃO 6
3 PROCESSO 3 2 REQUISIÇÃO 2
4 PROCESSO 4 2 REQUISIÇÃO 3
5 PROCESSO 5 3 CRAF 4
6 PROCESSO 6 3 CRAF 5


SIMPLIFICADO
PROCESSO 2 - APOSTILAMENTO
PROCESSO 2 - CRAF
PROCESSO 2 - REQUISIÇÃO
PROCESSO 3 - REQUISIÇÃO
PROCESSO 4 - REQUISIÇÃO
PROCESSO 5 - CRAF
PROCESSO 6 - CRAF

Tá ai o que você queria,

Espero ter ajudar.

qualquer coisa entre em contato te dou mais uma ajudinha.

skype: anderson@case13.com.br
Responder