显示来自 table 的所有记录,其中 ROW_NUMBER>1 in SQL Server 2014

Display all records from a table where ROW_NUMBER>1 in SQL Server 2014

我正在尝试显示 table 中的所有记录,其中 RN > 1

这是我遵循的代码和步骤

Create table #Data(id int,name Varchar(max))

Insert into #Data values
(1,'A'),
(2,'A'),
(3,'A'),
(4,'B'),
(5,'B'),
(1,'C')

Select *,ROW_NUMBER() over(partition by name order by id) as rn
into #temp
from #Data

--Fetching Subsequent records
select * from #Data
where name in 
(
   Select distinct name from #temp where rn>1
)

输出:

id  name
1   A
2   A
3   A
4   B
5   B

有人可以建议一种不包括中间温度 table 和子查询的更好方法吗?

这对你有用吗?

select a.* from (
    Select *,ROW_NUMBER() over(partition by name order by id) as rn
    from #Data
) a
WHERE a.rn>1

rn 在子查询中,然后外部的 where 子句将其过滤掉。

使用Cte,获取记录rownum

with cte as
(
Select *,ROW_NUMBER() over (partition by id order by name ) rn
from #Data)
select Id,Name from cte where rn<=1

这是一个完整的工作示例,很像@B House,但是使用变量 table 而不是临时变量 table,你确实说 rn > 1

declare @example as table (
    exampleid int
,   name_ varchar(max)
);

insert into @example (exampleid, name_)
select 1, 'A' union all
select 2, 'A' union all
select 3, 'A' union all
select 4, 'B' union all
select 5, 'B' union all
select 1, 'C';

     ;with cte as (
        select row_number() over(partition by name_ order by exampleid) rn
             , *
          from @example
        )

        select *
          from cte
         where rn > 1

输出

rn  exampleid   name_
2   2           A
3   3           A
2   5           B

如果我没记错,你想计算每个 name 出现的次数。并且 select 个计数 > 1 的名称。则无需使用 row_number。检查此查询

select
    id, name
from (
    select
        *, cn = count(*) over (partition by name)
    from
        #Data
) t
where
    cn > 1

输出

id  name
--------
1   A
2   A
3   A
4   B
5   B