2017-07-26 108 views
0

我有一個表下面的結構和數據...選擇之上鮮明的結果,但返回的所有結果

email  name address 
[email protected] ab us 
[email protected] de fr 
[email protected] bv dc 
[email protected] cd mm 
[email protected] bv dc 
[email protected] cd mm 

我想基於之上的電子郵件,以顯示不同的行。例如,在上述情況下的結果應該是:

email  name address 
[email protected] ab us 
[email protected] bv dc 
[email protected] cd mm 
[email protected] de fr 
[email protected] bv dc 
[email protected] cd mm 

我使用下面的查詢,但只會讓我在不同的結果,我需要在上面

select ROW_NUMBER() OVER(PARTITION BY email ORDER BY email DESC) AS RowNumber, email, name address where RowNumber = 1 
+0

請提供您創建的查詢。 – Alex

+0

我想你想使用row_number()(通過電子郵件順序分區)然後按順序排序? – ZLK

+0

剛剛編輯的問題和使用的row_number,但如何使用順序,以獲得不同的結果頂部 – Anurag

回答

2

最簡單的方式具有鮮明的所有行...只需在ORDER BY子句中使用ROW_NUMBER ...

IF OBJECT_ID('tempdb..#TestData', 'U') IS NOT NULL 
DROP TABLE #TestData; 

CREATE TABLE #TestData (
    email VARCHAR(10) NOT NULL, 
    [name] CHAR(2) NOT NULL, 
    [address] CHAR(2) NOT NULL 
    ); 

INSERT #TestData (email, [name], [address]) VALUES 
    ('[email protected]', 'ab', 'us'), 
    ('[email protected]', 'de', 'fr'), 
    ('[email protected]', 'bv', 'dc'), 
    ('[email protected]', 'cd', 'mm'), 
    ('[email protected]', 'bv', 'dc'), 
    ('[email protected]', 'cd', 'mm'); 

SELECT 
    * 
FROM 
    #TestData td 
ORDER BY 
    ROW_NUMBER() OVER (PARTITION BY td.email ORDER BY td.[name]); 
+2

另一種方式,但太少,這樣做'總和(1)OVER(PARTITION BY td.email ORDER BY td。[name] rows在無界的前一行和當前行之間) –