How to group multiple records into a single row

Asked

Viewed 2,509 times

3

I have a query where I need the values of other related tables to be grouped in a single column. For this I use a for, however, the lines come duplicated.

inserir a descrição da imagem aqui

I would need the result to bring only the full line, in the example line 6. Does anyone have any idea how to do this?

Below follows the select I use.

Select
  MAS_INDIVIDUO.INDIVIDUO_ID AS INDIVIDUO_ID
  ,Upper(Stuff((Select ', ' + Cast(t3.BFA_DESCRICAO As varchar(100)) From MAS_BUSCA_DE_FALTOSOS t3 Where t3.BUSCA_DE_FALTOSOS_ID In (Select MAS_VISITA_BUSCA_FALTOSOS.BUSCA_DE_FALTOSOS_ID From MAS_VISITA_BUSCA_FALTOSOS Where MAS_VISITA_BUSCA_FALTOSOS.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) BUSCA_ATIVA
  ,Upper(Stuff((Select ', ' + Cast(t2.ACO_DESCRICAO As varchar(100)) From MAS_ACOMPANHAMENTO t2 Where t2.ACOMPANHAMENTO_ID In (Select MAS_VISITA_ACOMPANHAMENTO.ACOMPANHAMENTO_ID From MAS_VISITA_ACOMPANHAMENTO Where MAS_VISITA_ACOMPANHAMENTO.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) ACOMPANHAMENTO
  ,Upper(Stuff((Select ', ' + Cast(t4.MVI_DESCRICAO As varchar(100)) From MAS_MOTIVO_VISITA t4 Where t4.MOTIVO_VISITA_ID In (Select MAS_VISITA_MOTIVO_VISITA.MOTIVO_VISITA_ID From MAS_VISITA_MOTIVO_VISITA Where MAS_VISITA_MOTIVO_VISITA.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) OUTROS
  ,Upper(Stuff((Select ', ' + Cast(t5.AOU_DESCRICAO As varchar(100)) From MAS_ACOMPANHAMENTO_OUTROS t5 Where t5.ACOMPANHAMENTO_OUTROS_ID In (Select MAS_VISITA_ACOMPANHAMENTO_OUTROS.ACOMPANHAMENTO_OUTROS_ID From MAS_VISITA_ACOMPANHAMENTO_OUTROS Where MAS_VISITA_ACOMPANHAMENTO_OUTROS.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) ENDEMIA
From
  MAS_VISITA
  Inner Join
  MAS_INDIVIDUO On MAS_INDIVIDUO.INDIVIDUO_ID = MAS_VISITA.INDIVIDUO_ID
  LEFT Join
  MAS_AGENTE On MAS_AGENTE.AGENTE_ID = MAS_VISITA.AGENTE_ID
  Left Join
  MAS_SEXO On MAS_SEXO.SEXO_ID = MAS_INDIVIDUO.SEXO_ID
  left Join
  MAS_VISITA_ACOMPANHAMENTO ON MAS_VISITA.VISITA_ID = MAS_VISITA_ACOMPANHAMENTO.VISITA_ID
  Left Join
  MAS_VISITA_MOTIVO_VISITA On MAS_VISITA.VISITA_ID = MAS_VISITA_MOTIVO_VISITA.VISITA_ID
  Left Join
  MAS_VISITA_BUSCA_FALTOSOS On MAS_VISITA.VISITA_ID = MAS_VISITA_BUSCA_FALTOSOS.VISITA_ID
  Left Join
  MAS_VISITA_ACOMPANHAMENTO_OUTROS On MAS_VISITA.VISITA_ID = MAS_VISITA_ACOMPANHAMENTO_OUTROS.VISITA_ID
WHERE
  MAS_INDIVIDUO.INDIVIDUO_ID = 2822
GROUP BY
  MAS_INDIVIDUO.INDIVIDUO_ID,
  MAS_VISITA.VISITA_ID
GO
  • Eduardo Couto, if you have found the answer, do not forget to publish the answer here in your question.

2 answers

1

Add the And clause by checking if records are void

Select
   MAS_INDIVIDUO.INDIVIDUO_ID AS INDIVIDUO_ID
  ,Upper(Stuff((Select ', ' + Cast(t3.BFA_DESCRICAO As varchar(100)) From MAS_BUSCA_DE_FALTOSOS t3 Where t3.BUSCA_DE_FALTOSOS_ID In (Select MAS_VISITA_BUSCA_FALTOSOS.BUSCA_DE_FALTOSOS_ID From MAS_VISITA_BUSCA_FALTOSOS              Where MAS_VISITA_BUSCA_FALTOSOS.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) BUSCA_ATIVA
  ,Upper(Stuff((Select ', ' + Cast(t2.ACO_DESCRICAO As varchar(100)) From MAS_ACOMPANHAMENTO t2 Where t2.ACOMPANHAMENTO_ID In (Select MAS_VISITA_ACOMPANHAMENTO.ACOMPANHAMENTO_ID From MAS_VISITA_ACOMPANHAMENTO Where MAS_VISITA_ACOMPANHAMENTO.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) ACOMPANHAMENTO
  ,Upper(Stuff((Select ', ' + Cast(t4.MVI_DESCRICAO As varchar(100)) From MAS_MOTIVO_VISITA t4 Where t4.MOTIVO_VISITA_ID In (Select MAS_VISITA_MOTIVO_VISITA.MOTIVO_VISITA_ID From MAS_VISITA_MOTIVO_VISITA Where MAS_VISITA_MOTIVO_VISITA.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) OUTROS
  ,Upper(Stuff((Select ', ' + Cast(t5.AOU_DESCRICAO As varchar(100)) From MAS_ACOMPANHAMENTO_OUTROS t5 Where t5.ACOMPANHAMENTO_OUTROS_ID In (Select MAS_VISITA_ACOMPANHAMENTO_OUTROS.ACOMPANHAMENTO_OUTROS_ID From MAS_VISITA_ACOMPANHAMENTO_OUTROS Where MAS_VISITA_ACOMPANHAMENTO_OUTROS.VISITA_ID = MAS_VISITA.VISITA_ID) For Xml Path('')), 1, 1, '')) ENDEMIA
  From
      MAS_VISITA
  Inner Join
      MAS_INDIVIDUO On MAS_INDIVIDUO.INDIVIDUO_ID = MAS_VISITA.INDIVIDUO_ID
  LEFT Join
      MAS_AGENTE On MAS_AGENTE.AGENTE_ID = MAS_VISITA.AGENTE_ID
  Left Join
      MAS_SEXO On MAS_SEXO.SEXO_ID = MAS_INDIVIDUO.SEXO_ID
  left Join
      MAS_VISITA_ACOMPANHAMENTO ON MAS_VISITA.VISITA_ID =                  MAS_VISITA_ACOMPANHAMENTO.VISITA_ID
  Left Join
      MAS_VISITA_MOTIVO_VISITA On MAS_VISITA.VISITA_ID = MAS_VISITA_MOTIVO_VISITA.VISITA_ID
  Left Join
      MAS_VISITA_BUSCA_FALTOSOS On MAS_VISITA.VISITA_ID = MAS_VISITA_BUSCA_FALTOSOS.VISITA_ID
  Left Join
      MAS_VISITA_ACOMPANHAMENTO_OUTROS On MAS_VISITA.VISITA_ID = MAS_VISITA_ACOMPANHAMENTO_OUTROS.VISITA_ID
  WHERE
     MAS_INDIVIDUO.INDIVIDUO_ID = 2822
  and 
     MAS_AGENTE.AGENTE_ID is not null /*Todas as Tabelas que não deseja que estejam nulas coloca a condição para que só traga se não for null*/
 GROUP BY
     MAS_INDIVIDUO.INDIVIDUO_ID,
     MAS_VISITA.VISITA_ID
 GO
  • Unfortunately that didn’t solve.

  • Solved, thank you!

  • 1

    @Eduardocouto, mark this answer as the solution since it solved your problem

  • I don’t think that really solves the problem

-3

SELECT Id+ ': '+Name+ ', ' AS idName
FROM Table1
FOR XML PATH('')

Browser other questions tagged

You are not signed in. Login or sign up in order to post.