在博客园的博问中看到了一个这样的提问:一个表中有id和name两个字段,id是连续非空不重复的,想要交换相邻表记录的name值(单双两两交换)。

另外,如果最后的单独行没有对应的下一行匹配记录的话,就不更新最后的单独行记录。

觉得有点意思,就试着实现一下(SQL Server),并记录下来。

创建一个diosos表。

-- 如果表存在,就删除表
if object_id(N'diosos', N'U') is not null drop table diosos;
-- 创建表
create table diosos(id int, name varchar(64));

往表中插入数据。

-- 插入数据
insert into diosos(id, name) values(1, 'one');
insert into diosos(id, name) values(2, 'two');
insert into diosos(id, name) values(3, 'three');
insert into diosos(id, name) values(4, 'four');
insert into diosos(id, name) values(5, 'five');
insert into diosos(id, name) values(6, 'six');
insert into diosos(id, name) values(7, 'seven');
insert into diosos(id, name) values(8, 'eight');
insert into diosos(id, name) values(9, 'nine');

查询出来看看数据是不是对的先。

-- 查询数据
select * from diosos;

实现相邻表记录交换(单双两两交换),原理就是根据对id取余判断奇偶和相邻id加减做左外连接关联,更新行记录的name。

-- 更新,两两交换,不成对不交换
update d1 set d1.name = d2.name
from diosos d1
left join diosos d2
on (d1.id%2 = 0 and d1.id = (d2.id + 1)) or (d1.id%2 = 1 and d1.id = (d2.id - 1))
where d2.name is not null;

再次查询,成功实现。

-- 再次查询
select * from diosos;

还是挺好玩的,虽然我觉得几乎不会有实际场景,哈哈哈。

"你要相信,在这个世界上会有人懂你背后的苦,也会有人愿意给你一整个季节的灿烂。"

sql server相邻表记录交换(单双两两交换)的更多相关文章

  1. 查找 SQL SERVER 所有表记录数

    -- 所有表的记录数 SELECT a.name, b.rowsFROM sysobjects AS a INNER JOIN sysindexes AS b ON a.id = b.idWHERE ...

  2. 统计SQL Server所有表记录数

    SELECT SCHEMA_NAME(t.schema_id) AS [schema] ,t.name AS tableName ,i.rows AS [rowCount] FROM sys.tabl ...

  3. oracle相邻表记录交换(单双两两交换)

    在博客园的博问中看到了一个这样的提问:一个表中有id和name两个字段,id是连续非空不重复的,想要交换相邻表记录的name值(单双两两交换). 另外,如果最后的单独行没有对应的下一行匹配记录的话,就 ...

  4. 千万级SQL Server数据库表分区的实现

    千万级SQL Server数据库表分区的实现 2010-09-10 13:37 佚名 数据库 字号:T | T 一般在千万级的数据压力下,分区是一种比较好的提升性能方法.本文将介绍SQL Server ...

  5. SQL Server 查询表的记录数(3种方法,推荐第一种)

    http://blog.csdn.net/smahorse/article/details/8156483 --SQL Server 查询表的记录数 --one: 使用系统表. SELECT obje ...

  6. SQL Server 系统表简介

    SQL Server 系统表简介 系统目录是由描述SQL Server 系统的数据库.基表.视图和索引等对象的结构的系统表组成.SQL Server 经常访问系统目录,检索系统正常运行所需的必要信息. ...

  7. 【转】SQL Server 查询表的记录数(3种方法,推荐第一种)

    --SQL Server 查询表的记录数 --one: 使用系统表. SELECT object_name (i.id) TableName, rows as RowCnt FROM sysindex ...

  8. SQL Server删除表信息的三种方法

    1.使用DELETE实现SQL Server删除表信息 (1)删除表中的全部信息 USE student GO DELETE student      --不加where条件,删除表中的所有记录 go ...

  9. Sql server 系统表

    sql server系统表详细说明 SQL Server 用户库中系统表说明 名称 说明 备注 syscolumns 每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.   sys ...

随机推荐

  1. git 文件补录和别名

    当git当前的版本要有部分忘记提交或新修改的东西包含在已提交(最近一次提交的版本)的版本时,我们可以进行文件补录 命令:git commit --amend -a 1.git log 查看最后一次提交 ...

  2. linux常用命令修改权限查看文档

    一.>和>>指令 >用于将执行结果写入后面的文件中: 把前方语句的结果存进文件,若文件不存在会自动创建 >:输出重定向 会覆盖原来文件内容 >>:追加重定向 ...

  3. LeetCode 1291. 顺次数

    地址 https://leetcode-cn.com/problems/sequential-digits/submissions/ 题目描述我们定义「顺次数」为:每一位上的数字都比前一位上的数字大 ...

  4. mjml - 如何快速编写响应式电子邮件?

    一.背景 以前做项目碰到发邮件的需求,邮件模板的编辑就是一件头疼的事.因为虽说邮件是支持 HTML 的,但是确是 HTML 子集程度的支持,所以存在必须通过 <table> 排版的恶心之处 ...

  5. Python 一键获取百度网盘提取码

    该 GIF 图来自于官网,文末有给出链接. 描述 依托于百度网盘巨大的的云存储空间,绝大数人会习惯性的将一些资料什么的存储到上面,但是有的私密链接需要提取码,但是让每个想下载私密资源的人记住每一个提取 ...

  6. Emoji来龙去脉

    1997年,日本人发明,定义在unicode的私有区域. 此时两个字节可以表示emoji. IOS 4在日本支持emoji,使用的是这种私有编码. 2010年,unicode 6.0正式支持emoji ...

  7. 阿里面试实战题3----String,StringBuilder,StringBuffer区别

    String public final class String implements java.io.Serializable, Comparable<String>, CharSequ ...

  8. Selenium(六):frame切换、窗口切换

    1. 切换到frame index.html: <!DOCTYPE html> <html> <head> <meta charset="UTF-8 ...

  9. JVM发生full gc的情景有哪些

    除直接调用System.gc外,触发Full GC执行的情况有如下四种.1. 旧生代空间不足 旧生代空间只有在新生代对象转入及创建为大对象.大数组时才会出现不足的现象,当执行Full GC后空间仍然不 ...

  10. 一文学会JVM配置参数与工具使用

    经过前面的各种分析,我们知道了关于JVM很多的知识,比如版本信息,类加载,堆,方法区,垃圾回收等,但是总觉得心里不踏实,原因是没看到实际的一些东西. 所以这在本文,咱们就好好来聊一聊关于怎么将这些内容 ...