`

在SqlServer中如何找到列中断缺的值并补充上

阅读更多
 

--在Sql Server 2005 中如何找到列中断缺的值,并补充上.

USE tempdb;
GO
IF OBJECT_ID('dbo.T1'IS NOT NULL
  
DROP TABLE dbo.T1
GO
CREATE TABLE dbo.T1(col1 INT NOT NULL PRIMARY KEY);
INSERT INTO dbo.T1(col1) VALUES(1);
INSERT INTO dbo.T1(col1) VALUES(2);
INSERT INTO dbo.T1(col1) VALUES(3);
INSERT INTO dbo.T1(col1) VALUES(100);
INSERT INTO dbo.T1(col1) VALUES(101);
INSERT INTO dbo.T1(col1) VALUES(103);
INSERT INTO dbo.T1(col1) VALUES(104);
INSERT INTO dbo.T1(col1) VALUES(105);
INSERT INTO dbo.T1(col1) VALUES(106);


--------------------方法一---------------------

--找出断值下界部分
SELECT col1
FROM dbo.T1 AS A
WHERE NOT EXISTS
  (
SELECT * FROM dbo.T1 AS B
   
WHERE B.col1 = A.col1 + 1);
--去掉多余的断值下界,最后一行
SELECT col1 + 1 AS start_range
FROM dbo.T1 AS A
WHERE NOT EXISTS
  (
SELECT * FROM dbo.T1 AS B
   
WHERE B.col1 = A.col1 + 1)
  
AND col1 < (SELECT MAX(col1) FROM dbo.T1);

--断值上界
SELECT col1
FROM dbo.T1 AS A
WHERE NOT EXISTS
  (
SELECT * FROM dbo.T1 AS B
   
WHERE B.col1 = A.col1 - 1);
--去掉多余的断值上界,第一行
SELECT col1 - 1 AS start_range
FROM dbo.T1 AS A
WHERE NOT EXISTS
  (
SELECT * FROM dbo.T1 AS B
   
WHERE B.col1 = A.col1 - 1)
  
AND col1 > (SELECT min(col1) FROM dbo.T1);


----------------方法二--------------------------

--相邻两行的值
SELECT col1 AS cur,
  (
SELECT MIN(col1) FROM dbo.T1 AS B
   
WHERE B.col1 > A.col1) AS nxt
FROM dbo.T1 AS A;

--找出断值的两行(当前行和下一行相差值大于一) 
SELECT cur + 1 AS start_range, nxt - 1 AS end_range
FROM (SELECT col1 AS cur,
        (
SELECT MIN(col1) FROM dbo.T1 AS B
        
WHERE B.col1 > A.col1) AS nxt
      
FROM dbo.T1 AS A) AS D
WHERE nxt - cur > 1;


------------------------------方法三

--创建辅助表Nums,据说sql server 2008会在数据库中自带该表,
--
关于辅助表的创建,有几个经典的例子,以后再写上来.
--
这里只是用效率最低的方法创建一个1W行的辅助表,只够这里用.
if(object_id('Nums'is not null)
    
drop table Nums
create table Nums( 
int
)
declare @num int
set @num = 1
while @num<10000
begin 
insert into Nums values (@num)
set @num=@num+1
end
--利用辅助表找出所有缺值
SELECT n FROM dbo.Nums
WHERE n BETWEEN (SELECT MIN(col1) FROM dbo.T1)
            
AND (SELECT MAX(col1) FROM dbo.T1)
  
AND NOT EXISTS(SELECT * FROM dbo.T1 WHERE col1 = n);


--找出缺值,自然很容易就可以把缺值插入表中,举一列如下:
insert into dbo.T1
SELECT n FROM dbo.Nums
WHERE n BETWEEN (SELECT MIN(col1) FROM dbo.T1)
            
AND (SELECT MAX(col1) FROM dbo.T1)
  
AND NOT EXISTS(SELECT * FROM dbo.T1 WHERE col1 = n);



分享到:
评论

相关推荐

    如何在SQL Server计算列和平均值

    本文将介绍如何在 SQL Server 中计算列和平均值。 首先,我们需要了解 Having 子句和 Where 子句的区别。Having 子句用于过滤聚合结果,而 Where 子句用于过滤原始数据。如果你只需要一个表,那么你可以用 Where ...

    SQL Server 将某一列的值拼接成字符串.docx

    在SQL Server中,将某一列的值拼接成字符串是一个常见的需求,这通常涉及到数据的格式化输出,比如创建报告或者导出数据。这个过程可以通过几种不同的方法来实现,其中包括使用FOR XML PATH子句和CONCAT函数。我们将...

    sql server 中如何增加递增的序号列【实用】

    sql server 中如何增加递增的序号列 sql server 是一种功能强大且广泛应用的关系...在 sql server 中增加递增的序号列可以使用多种方法,每种方法都有其特点和优缺。选择哪种方法取决于具体的业务需求和数据特点。

    SQL Server将一列的多行内容拼接成一行的实现方法

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行,比如表中有两列数据 : 类别 名称 AAA 企业1 AAA 企业2 AAA 企业3 ...

    sqlserver 实现 行转列 split 分割的函数

    sqlserver 实现 行转列 split 分割的函数,具体使用方法写有在文件里。

    SQLServer中如何将一个字段的多个记录值合在一行显示

    SQLServer 中将一个字段的多个记录值合并到一行显示的实现方法 SQL Server 是一种关系型数据库管理系统,具有强大的数据处理能力和存储能力。在实际应用中,我们经常需要将一个字段的多个记录值合并到一行显示,以...

    vs中断点测试sqlserver的存储过程

    在IT领域,特别是软件开发与数据库管理中,对SQL Server的存储过程进行中断点测试是一项重要的技能,它有助于开发者深入理解代码执行流程,及时发现并修复潜在错误。下面,我们将详细探讨如何在Visual Studio(以下...

    SQL Server行转列使用

    在SQL Server中,将数据从行转换为列是一项常见的需求,尤其在数据分析和报表展示时。这个过程通常称为“行列转换”或“PIVOT”操作。本篇将深入探讨如何在SQL Server中实现行转列,以满足各种场景的需求。 首先,...

    将Sql Server 2000中的数据库备份文件还原到sql2005中

    Sql Server 2000和Sql Server 2005之间的关键差异在于:在Sql Server 2000中,需要新建数据库并对其还原,而在Sql Server 2005中,需要不能新建数据库才能对其还原。另外一个区别就是Sql Server 2000时是要新建的...

    SqlServer行转列和列转行

    SqlServer如何进行行转列和列转行方法

    SqlServer连接工具

    综上所述,SQL Server连接工具是SQL Server生态系统中不可或缺的一部分,它们为数据库管理员和开发者提供了强大的支持,使得SQL Server的管理和开发工作更加高效便捷。无论是在本地环境还是云端,选择合适的工具能够...

    kepserver读取SQL Server数据库

    在设备创建过程中,你需要指定数据类型,例如数值、字符串或布尔值,这些数据类型应该与SQL Server中的列类型相对应。然后,在表中选择要读取的特定列,这些列将成为OPC标签,可以在OPC客户端应用程序中访问。完成...

    C#中读取sql server的数据,并在datagridview中显示

    本文将深入探讨如何在C#中读取SQL Server的数据,并将其在DataGridView控件中进行展示,以此来实现数据的可视化呈现。此过程不仅涉及到了数据库连接、SQL查询语句的执行,还涵盖了数据集(DataSet)的使用以及...

    SQL Server 中文帮助文档 chm格式

    在SQL Server的中文帮助文档中,你可以找到以下关键知识点: 1. **SQL Server架构**:了解SQL Server的核心组件,如数据库引擎、Analysis Services、Integration Services、Reporting Services等,以及它们在数据...

    SqlServer2005 打开 SqlServer2008 mdf文件

    Sql Server 2005 打开 Sql Server 2008 mdf 文件数据库转换是指将 Sql Server 2008 中的数据库文件(mdf 文件)转换为 Sql Server 2005 可以识别的格式,以便在 Sql Server 2005 中使用。这种转换过程需要使用 Sql ...

    sql server2019安装包

    6. **SQL Server on Linux and Docker**:SQL Server 2019继续支持在Linux操作系统和Docker容器上运行,增强了跨平台兼容性。 7. **SQL Server Management Studio (SSMS)**:SSMS是用于管理SQL Server实例的重要...

    SQL server Native Client 10.0

    用户需要通过控制面板的数据源管理工具(如ODBC Data Source Administrator或OLE DB Provider for SQL Server)来创建和配置数据源,以便应用程序可以找到并连接到SQL Server实例。 7. **开发和调试**: 对于开发...

    sqlserver字段最大值加1后补0

    sqlserver字段最大值加1后补0

    列出网络中所有SQLSERVER服务器

    在VB代码中,这可能表现为创建WMI连接,查询`SQLServer`类,并将结果输出到控制台或用户界面。同时,需要确保在目标机器上SQL Server Browser服务是开启的,否则可能无法获取到所有实例信息。 在提供的压缩包文件...

    在SQL SERVER 2000中实行简繁体转换

    在SQL SERVER 2000中进行简繁体转换是一个重要的功能,特别是在处理中文数据时。这个过程涉及到数据库设计和自定义函数的创建,以便在数据库中实现字符集的转换。下面将详细介绍如何在SQL SERVER 2000中执行简繁体...

Global site tag (gtag.js) - Google Analytics