关于多条id相同,只取一条记录得sql语句

 

sqlserver  2005 中

 

CREATE TABLE [dbo].[mian](

[id] [int] NOT NULL,

[name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,

[age] [int] NULL,

[state] [bit] NOT NULL

 

--执行2遍,则共8条记录

 

insert into mian values(1,'st',27,1)

insert into mian values(1,'tj',28,0)

insert into mian values(2,'2st',45,0)

insert into mian values(2,'2tj',88,0)

div>
id name age state 

 

 

 

1 st   27 1

1 tj    28 0

2 2st 45 0

2 2tj  88 0

1 st   27 1

1 tj    28 0

2 2st 45 0

2 2tj  88 0

执行id有相同,执行有state有1的就取出1的,没有的就取出0中的任何一条

 

 

 

 

select * from (select * , row_number() over(partition by id order by state desc) as sequence 

from mian ) a where sequence =1

--where 前要有个表名,^-^

 

oracle中要如下修改:

 

select * from (select t.* , row_number() over(partition by t.id order by t.state desc) as sequence 

from mian t )  a where sequence =1

 

oracle 中要加个别名t,与sqlserver2005中不同,不知道为什么。

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值