表T
有字段 id name alias age isDelete对于name 和 alias 都相同的数据,保证其中体条isdelete为false,其他的为true;举例:记录有:
id name alias isDelete
1 张三 小张 false
2 李四 小李 false
3 张三 嚣张 false变为:
id name alias isDelete
1 张三 小张 false
2 李四 小李 false
3 张三 嚣张 true
有字段 id name alias age isDelete对于name 和 alias 都相同的数据,保证其中体条isdelete为false,其他的为true;举例:记录有:
id name alias isDelete
1 张三 小张 false
2 李四 小李 false
3 张三 嚣张 false变为:
id name alias isDelete
1 张三 小张 false
2 李四 小李 false
3 张三 嚣张 true
from (select row_number()over(partition by name,alias order by id) no,* from tb) a
select id ,name, alias,isDelete=case when ((select from tb where name=a.name and alias=a.alias and id<=a.id)>1) then 2 else 1 end
from tb a
他的意思是按照name,alias排序
case when no=1 then 'false' else 'true' end的意思是当排序列为1的时候 isdelete等于false 其他的时候为true 这样就满足了你的要求
是增加排序列
我猜到了 去查了下 partition by的含义!!看懂了!
非常感谢2位大侠!
row_number()
cte
临时表