SQL忽略重复的主键

时间:2015-02-09 15:15:32

标签: sql sql-server tsql primary-key

想象一下,您有一个SELECT语句的结果字符串:

ID (pk)  Name     Address
1        a        b
1        c        d
1        e        f
2        a        b
3        a        d
2        a        d

是否可以更改SQL语句以仅为ID为1的记录获取一条记录?

我有一个SELECT语句,显示多个可以具有相同主键的值。我想只记录其中一条记录,如果说,我有5条记录使用相同的主键。

SQL:http://pastebin.com/cFCBA2Uy

屏幕截图:http://i.imgur.com/UlMBZhC.png

我想要的是只显示一个文件,例如档案号:925,890

1 个答案:

答案 0 :(得分:2)

您声明无论在同一个ID中有多行时选择哪一行,您只需要为每个ID添加一行。

以下查询执行您要求的内容:

DECLARE @T table
(
    id int, 
    name varchar(50), 
    address varchar(50)
)
INSERT INTO @T VALUES
(1, 'a', 'b'),
(1, 'c', 'd'),
(1, 'e', 'f'),
(2, 'a', 'b'),
(3, 'a', 'd'),
(2, 'a', 'd');

WITH A AS
(
    SELECT 
        t.id, t.name, t.address,
        ROW_NUMBER() OVER (PARTITION BY id ORDER BY (SELECT NULL)) AS RowNumber
    FROM
        @T t
)
SELECT
    A.id, A.name, A.address
FROM
    A
WHERE
    A.RowNumber = 1

但我认为应该有一个标准。如果找到一个,请在OVER子句中将您的标准表达为ORDER BY。

编辑:

这里有结果:

+----+------+---------+
| id | name | address |
+----+------+---------+
|  1 | a    | b       |
|  2 | a    | b       |
|  3 | a    | d       |
+----+------+---------+

免责声明:我写的查询是非确定性的,不同的条件(索引,统计等)可能会导致不同的结果。