从两个字段中选择不同的行

时间:2013-04-10 04:35:35

标签: sql sql-server

我有一张有数百万条记录的表格。

所以我可能会有这些专栏

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,狗,白

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分: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