想象一下,您有一个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
答案 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 |
+----+------+---------+
免责声明:我写的查询是非确定性的,不同的条件(索引,统计等)可能会导致不同的结果。