110,538
社区成员
发帖
与我相关
我的任务
分享
dense_rank
来实现..因为他的排名比较好玩..
他分组之后 是
1
2
3
1
2
1
2
3
4
5
也就是没组都从1开始 换组之后 索引又从1开始
所以你的需求就是使用排名分组后 删除<>1的数据
我这里面有一些测试代码(以前给别人写过的) 你可以看下.把select修改成delete就可以了
create table orders
(
id int,
orderName varchar(100)
)
go
create table cars
(
id int identity(1,1) ,
ordersid int,
pname varchar(100),
pprice varchar(100)
)
go
insert into orders values(10001,'订单1')
insert into cars values(10001,'商品1','价格1')
insert into cars values(10001,'商品2','价格2')
insert into cars values(10001,'商品3','价格3')
insert into orders values(10002,'订单2')
insert into cars values(10002,'商品21','价格21')
insert into cars values(10002,'商品22','价格22')
insert into cars values(10002,'商品23','价格23')
go
select * from orders
select * from cars
go
select
case x.AId when '1' then x.orderName else '' end 订单名称,
x.pname,x.pprice
from
(
SELECT t.*, dense_rank() OVER (partition BY t.id
ORDER BY t.ids ASC) AS AId
from
(
select a.id as ids,b.id,b.orderName,a.pname,a.pprice from cars a inner join orders b on a.ordersid=b.id
) as t
) as x
go