我在编写用于显示表的某些记录的存储过程时遇到了问题。下面的代码是为了说明这个问题。
declare @t table(
Id int primary key identity(1,1),
ParentId int null,
Item varchar(50)
)
-----------------------------------------------------------
insert into @t(ParentId,Item)
select null,'A' union all
select null,'A' union all
select 1,'B' union all
select 1,'B' union all
select null,'C' union all
select 2,'D' union all
select 2,'D'
插入表@t后的数据是这样的。
Id | ParentId | Item
---------------------
1 NULL A
2 NULL A
3 1 B
4 1 B
5 NULL C
6 2 D
7 2 D
我想选择所有为空的记录,ParentId
但只选择不为空的记录的第一条记录ParenId
。
期望的结果:
Id | ParentId | Item
---------------------
1 NULL A
2 NULL A
3 1 B
5 NULL C
6 2 D
关于如何获得所需结果的任何想法?
假设“只有第一条记录”意味着
Id
您可以在 order by 子句中使用分区的rank()ParentId
和 a进行排序。case statement