2015-02-09 114 views
-3

想象一下,你有結果從SELECT語句的字符串:SQL忽略重複的主鍵

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

雖然查詢應該顯示哪一行/版本?爲什麼你會有一個允許重複開始的PK? – SchmitzIT 2015-02-09 15:16:48

+13

爲什麼你首先有重複的主鍵?這打敗了他們的預期目的...... – Siyual 2015-02-09 15:16:50

+0

顯示你的表格創建腳本。 – Cortwave 2015-02-09 15:17:21

回答

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  | 
+----+------+---------+ 

免責聲明:我寫的查詢是不確定性,不同條件(如索引,統計等)可能會導致不同的結果。