Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何从表中的相同记录列表中获取唯一记录?表中没有唯一的约束_Sql_Sql Server - Fatal编程技术网

Sql 如何从表中的相同记录列表中获取唯一记录?表中没有唯一的约束

Sql 如何从表中的相同记录列表中获取唯一记录?表中没有唯一的约束,sql,sql-server,Sql,Sql Server,我在SQL Server输出中有一个查询 假设我有一个表Ex.StudentMaster,其中有一些字段没有唯一的约束。 例如,编号和名称 该表具有相同的数据。例如: RollNo Name 1 Yoko 1 Yoko 1 Yoko 我只想要第三张唱片。如何识别此唯一记录?您可以使用DISTINCT返回的不同列组合 SELECT DISTINCT RollNo, Name FROM mytable 您可以使用DISTINC

我在SQL Server输出中有一个查询

假设我有一个表Ex.StudentMaster,其中有一些字段没有唯一的约束。 例如,编号和名称 该表具有相同的数据。例如:

RollNo      Name
    1       Yoko
    1       Yoko
    1       Yoko

我只想要第三张唱片。如何识别此唯一记录?

您可以使用DISTINCT返回的不同列组合

SELECT DISTINCT RollNo, Name
FROM mytable

您可以使用DISTINCT返回的列的DISTINCT组合

SELECT DISTINCT RollNo, Name
FROM mytable

任何一行都是第三行:-

create table test
(
n int,
name varchar(30)
);

insert into test values(1,'yoko'),(1,'yoko'),(1,'yoko');

select ROW_NUMBER() over(order by name) as ordinal, * from test;
with a as
(
select ROW_NUMBER() over(order by name) as ordinal, * from test
)
delete from a where a.ordinal = 3
删除第三行:-

create table test
(
n int,
name varchar(30)
);

insert into test values(1,'yoko'),(1,'yoko'),(1,'yoko');

select ROW_NUMBER() over(order by name) as ordinal, * from test;
with a as
(
select ROW_NUMBER() over(order by name) as ordinal, * from test
)
delete from a where a.ordinal = 3
删除最后一行:

with a as
(
select ROW_NUMBER() over(order by name) as ordinal, * from test
)
delete from a where a.ordinal = (select MAX(ordinal) from a)

任何一行都是第三行:-

create table test
(
n int,
name varchar(30)
);

insert into test values(1,'yoko'),(1,'yoko'),(1,'yoko');

select ROW_NUMBER() over(order by name) as ordinal, * from test;
with a as
(
select ROW_NUMBER() over(order by name) as ordinal, * from test
)
delete from a where a.ordinal = 3
删除第三行:-

create table test
(
n int,
name varchar(30)
);

insert into test values(1,'yoko'),(1,'yoko'),(1,'yoko');

select ROW_NUMBER() over(order by name) as ordinal, * from test;
with a as
(
select ROW_NUMBER() over(order by name) as ordinal, * from test
)
delete from a where a.ordinal = 3
删除最后一行:

with a as
(
select ROW_NUMBER() over(order by name) as ordinal, * from test
)
delete from a where a.ordinal = (select MAX(ordinal) from a)

什么版本的SQL Server?不管是2005+还是否,这都很重要。以及在无法区分重复行的情况下,如何确定最新的行是哪一行。它是第一行、第二行还是第三行是否重要?SQL Server的哪个版本?不管是2005+还是否,这都很重要。以及在没有可用于区分重复项的情况下如何确定最新的一行。重要的是它是第一行、第二行还是第三行?这就是我要做的,但这是SQL Server 2005+功能。无论如何,我会给出答案,最好是FGITW,而不是等待他的答案他使用的是什么版本,就我们所知,他可能正在使用最新版本-如果是SQL server 2000!谢谢,我得到了一个解决方案,用select ROW_NUMBER overorder by name作为ordinal,*从测试中我就是这么做的,但这是SQL Server 2005+的功能。不管怎样,我给出了答案,最好是FGITW,而不是等待他的答案他使用的是什么版本,据我们所知,他可能使用的是最新版本-如果是SQL server 2000!谢谢,我用select ROW_NUMBER overorder by name作为序号得到了解决方案,*来自testYes,这是真的。但问题是我只想要一张特定的唱片。使用DISTINCT会给我一条记录,但我不知道它是第一条、第二条还是第三条。是的,这是真的。但问题是我只想要一张特定的唱片。使用DISTINCT会给我一条记录,但我不知道它是第一条、第二条还是第三条记录。