显示来自 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
我正在尝试显示 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