SQL 忽略重复的主键

SQL Ignore duplicate primary keys

假设您有来自 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

你说当同一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       |
+----+------+---------+

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