How to group multiple records in a single row

2

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

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

Below is the selection that 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
    
asked by anonymous 09.05.2016 / 22:35

1 answer

0

Add the And clause by checking if the records are null

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
    
09.05.2016 / 23:03