1

我有一个 table_A 包含列 ID 中的重复记录,但每个重复 ID 都有不同的 E_ID。我已经使用下面提到的查询检索了记录。

select ID,E_ID,Comments
from table_A
where ID in (SELECT ID
                FROM table_A t where ID !=' '
                GROUP BY ID 
                HAVING COUNT(distinct E_ID) > 1
               )
group by ID,E_ID,Comments order by ID

这个查询会给我这样的输出

 ID |  E_ID   | Comments
11101   | 55237 | Null
11101   | 15243 | Null
11103   | 55249 | Null
11103   | 15286 | Null
11107   | 55255 | Null
11107   | 15290 | Null

现在我想更新评论列,它会给我如下表所示的输出。注意:请仔细查看评论语句,您会看到 E_ID 差异

ID  |  E_ID         | Comments
11101   |  55237    | Duplicate of E_ID 15243
11101   |  15243    | Duplicate of E_ID 55237
11103   |  55249    | Duplicate of E_ID 15286
11103   |  15286    | Duplicate of E_ID 55249
11107   |  55255    | Duplicate of E_ID 15290
11107   |  15290    | Duplicate of E_ID 55255

您可以在每个重复 ID 的 Comments 列中看到 E_ID 是交叉更新的。我需要一个更新查询来实现这一点,请帮忙。我真的不知道如何平铺这个。

4

2 回答 2

1

您可以使用outer apply查询来生成重复项列表。即使有多个重复项,这也将起作用:

update  org
set     Comments = 'Duplicate of E_ID ' + stuff(dup.lst, 1, 2, '')
from    TableA org
outer apply
        (
        select  ', ' + cast(dup.E_ID as varchar) as [text()]
        from    TableA dup
        where   dup.ID = org.ID
                and dup.E_ID <> org.E_ID
        for xml path('')
        ) dup(lst);

我将在它备份时添加一个 SQL Fiddle 示例(现在它正在显示datasource [sqlfiddle] doesn't exist。)

于 2013-04-30T11:08:27.453 回答
0

应该是这样的(目前无法检查,因此请原谅任何错别字)

update tablea
set comments=comment from 
(
  select a.id,a.e_id, 'Duplicate of E_ID '+convert(varchar(10),b.e_id) comment
  from tablea a join tablea b
  on a.id=b.id and a.e_id <> b.e_id 
) x 
where tablea.id = x.id and tablea.e_id= x.e_id
于 2013-04-30T11:01:24.363 回答