2013-04-10 71 views
-2

我有一張擁有數百萬條記錄的表。從兩個字段中選擇不同的行

所以我可能有這些列

A,B,C,d

,我需要選擇基於列a和b的所有不重複的記錄。

但我需要選擇列a,b,c和d不只是a和b。

我可以這樣做嗎?

編輯

數據可能會

1,1,青蛙,綠色

1,1,青蛙,棕色

2,1,貓,黑

2,4,狗,白色

所以我需要;

1,1,青蛙,綠色

2,1,貓,黑

2,4,狗,白

+1

你可以給樣本記錄你想要的結果?至少有10條記錄會做得很好 – 2013-04-10 04:36:25

+0

爲什麼第一行是'1,1,青蛙,綠色'而不是'1,1,青蛙,棕色'? PS:不,在DBMS中沒有「自然」的命令,沒有內置的「第一個」條件 – zerkms 2013-04-10 04:39:01

+0

@zerkms,這有什麼關係嗎?數據是數據,我無法改變它。我只需要列a和b形成一對唯一對的第一條記錄 – griegs 2013-04-10 04:40:25

回答

3

SQL Server支持公共表表達式和窗口功能。下面的查詢使用ROW_NUMBER(),根據組排列記錄。它按c ASC, d ASC排序(只是玩)。

WITH records 
AS 
(
    SELECT a, b, c, d, 
      ROW_NUMBER() OVER(PARTITION BY a, b ORDER BY c, d) rn 
    FROM TableName 
) 
SELECT a, b, c, d 
FROM records 
WHERE rn = 1 
+0

我認爲這是工作。我會再測試一下,讓你知道。謝謝 – griegs 2013-04-10 04:49:26

0

分區的是你的男人

SELECT a, b, c, d FROM (
    SELECT a, b, c, d, ROW_NUMBER() OVER (PARTITION BY a, b ORDER BY a, b) rn 
    FROM table 
) sq 
where rn = 1 
0

請嘗試:

select * 
From(
    select 
     row_number() over (partition by a, b order by a, b) RNum, 
     * 
    from 
     YourTable 
    )x 
where RNum=1 

樣品

select * From(
    select row_number() over (partition by a, b order by a, b) RNum, * 
    from(
     select 1 a, 1 b, 'frog' c, 'green' d union all 
     select 1 a, 1 b, 'frog' c, 'brown' d union all 
     select 2 a, 1 b, 'cat' c, 'black' d union all 
     select 2 a, 4 b, 'dog' c, 'white' d)x 
    )y 
where RNum=1 
相關問題