合并两个结果集并仍保持其中一列唯一

时间:2011-09-08 23:09:20

标签: sql-server-2005 tsql

我在create view语句中有两个中间结果集。结果集来自两个不同的连接路径,我需要将它们联合起来。但它并不止于此。由于ID列必须是唯一的,因此我需要结果集2中包含与第一个结果集相同的ID的行来覆盖第一个结果集中的相同行。

让我在这里说明一下:

Result set 1

ID    Value
------------
1     a
3     a
5     a
6     a
7     a
8     a

Result Set 2

ID    Value
------------
2     b
4     b
5     b
7     b
9     b
10    b

End result set
ID    value
------------
1     a
2     b
3     a
4     b
5     b
6     a
7     b
8     a
9     b
10    b

我不知道如何处理这个问题。 Union / except / intersect会创建重复的id,所以这没有用。

2 个答案:

答案 0 :(得分:1)

尝试删除结果集1中的元素,其中结果集2中的id存在于union all之前。

答案 1 :(得分:1)

SELECT COALESCE(set2.ID, set1.ID) AS ID,
       CASE WHEN set2.ID IS NULL THEN set1.Value ELSE set2.Value END AS Value
FROM set1
    FULL JOIN set2
        ON set1.ID = set2.ID