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

4

3 回答 3

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
于 2013-04-10T04:43:16.917 回答
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
于 2013-04-10T04:43:37.277 回答
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
于 2013-04-10T04:44:11.650 回答