2014-04-28 138 views
0

我有一個表,其中包含identity primary key id,CNumCUID和其他一些列。我想根據CNumCUID選擇不同的記錄,換句話說,如果兩個記錄具有相同的CNumCUID我想獲得最高的一個,我嘗試組合,但由於需要整行,所以它不起作用。Select distinct columns sql server

with a as (SELECT distinct CNum, CUID 
FROM Con) 
select c.CNum from Con c inner join 
a on a.CNum = c.CNum 
and a.CUID= c.CUID 
order by id 

該方法仍然獲得重複記錄。

任何人都知道如何解決問題?

+0

任何樣本數據? – cyan

+0

你是什麼意思,「我試過一羣一羣,但它不會工作,因爲想要整行」?你是否顯示你嘗試過的整個查詢? – jeroenh

回答

3

如果要選擇具有相同特徵的一組行的第一行,可以使用ROW_NUMBER() function和PARTITION BY子句。是這樣的:

SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY CNum, CUID ORDER BY Id) AS ROWNUM 
    FROM Con 
) x WHERE x.ROWNUM = 1 

子查詢增加了一個行號的每一行具有用於CNUM/CUID相同的值。

+1

+1雖然你的子查詢需要別名。 – GarethD

+0

@GarethD固定,thx – jeroenh

0

你從最終的SELECT語句缺少distinct

select distinct c.CNum 
from Con c 
    inner join a on a.CNum = c.CNum and a.CUID= c.CUID 
order by id 
0

也許我弄錯,但我不認爲你應該在你的查詢from Con c

您已經在CTE中包含Con,在那裏獲得不同的值。如果你再次使用它,你的CTE沒有意義。