如何 select 一个字段不同的单行? SQL 服务器

How to select single row where one field is different? SQL Server

我有一个 table 如下所示:

ID            NAME          SCHOOL          GRADUATIONYEAR           DEGREE                MAJOR
--------------------------------------------------------------------------------------------------
100           Ben         University1          2015             Bachelor of Arts           Major1
100           Ben         University1          2015             Bachelor of Arts           Major2
100           Ben         University2          2017             Master of Science          Major3

由于 Ben 有两条记录来自同一所大学,因为双专业(你可以看到相同的学校、毕业年份和学位),我只想提取其中一条记录而不是两条记录,我拉哪个专业并不重要,只需要一个而不是两个记录。 所以理想情况下,我希望它像下面这样:

ID            NAME          SCHOOL          GRADUATIONYEAR           DEGREE                MAJOR
--------------------------------------------------------------------------------------------------
100           Ben         University1          2015             Bachelor of Arts           Major1
100           Ben         University2          2017             Master of Science          Major3

我试过如下所示进行删除,但这最终会删除所有记录,在这种情况下是否可以使用 CASE?

DELETE FROM #table1 
WHERE ID = ID AND NAME = NAME AND SCHOOL = SCHOOL AND DEGREE = DEGREE

使用row_number():

select *
from (
    select
        t.*,
        row_number() over(
            partition by name, school, graduationyear, degree 
            order by major
        ) rn
    from mytable t
) t
where rn = 1

当两行的ame、school、graduation year、degree相同时,查询保留最小的major、alphabetically-wise(可以更改order by子句row_number() 如果你想要另一个标准)。

如果您想要 delete 语句:

with cte as (
    select row_number() over(
        partition by name, school, graduationyear, degree 
        order by major
    ) rn
    from mytable 
)
delete from cte where rn > 1