当SQL中有重复的ID时,如何获得第一行

时间:2018-01-29 15:35:10

标签: sql sql-server tsql

我正在使用join和union从SQL中的多个表中检索数据。我有一些带有重复ID的行,我只需要返回那些重复ID行的顶行,并将所有重复行中特定列中的数据合并到返回的顶行中的一列中。我不能使用max(createDate)因为它们在日期中也是重复的。

这是我的存储过程:

  select distinct 

    table1.*,
    table2.*
  from 
    calsses table1 
  inner join documents table2 on table1.ID = table2.ID

union all

  select distinct 

    table3.*,
    table2.*
  from 
    exams table3 
  inner join documents table2 on table3.ID = table2.ID

  order by table2.Date desc

结果如下:

当我运行此存储过程时,我会得到具有重复ID的行。

duplicate rows data_click here

如何从所有重复行中返回1行,并将重复行中“Exams”列中的数据合并到单个返回行中的“Exams”列中?

Target data_click here

请指教。感谢。

2 个答案:

答案 0 :(得分:0)

我认为XML PATH是你的陈述。

如果我提出你的问题,你有两个相同的行,而你没有任何字段可以选择一个。所以这一行中的任何一行都有Address字段分组。

select *, 
STUFF((SELECT '; ' + US.USR_NAME 
      FROM table_where_is_address twis
      WHERE twis.ID = aux.ID_to_join_with_correct_row
      FOR XML PATH('')), 1, 1, '') as grouped_address
from (
    select distinct 
      table1.*,
      table2.*
    from calsses table1 
    inner join documents table2 on table1.ID = table2.ID
    union all
    select distinct 
      table3.*,
      table2.*
    from exams table3 
    inner join documents table2 on table3.ID = table2.ID
    order by table2.Date desc
) aux

这为您的数据模型修改后应该有效。

答案 1 :(得分:0)