<!--
Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/
-->--各种字符串分函数
--3.3.1 使用游标法进行字符串合并处理的示例。
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
--合并处理
--定义结果集表变量
DECLARE @t TABLE(col1 varchar(10),col2 varchar(100))
--定义游标并进行合并处理
DECLARE tb CURSOR LOCAL
FOR
SELECT col1,col2 FROM tb ORDER BY col1,col2
DECLARE @col1_old varchar(10),@col1 varchar(10),@col2 int,@s varchar(100)
OPEN tb
FETCH tb INTO @col1,@col2
SELECT @col1_old=@col1,@s=''
WHILE @@FETCH_STATUS=0
BEGIN
IF @col1=@col1_old
SELECT @s=@s+','+CAST(@col2 as varchar)
ELSE
BEGIN
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
SELECT @s=','+CAST(@col2 as varchar),@col1_old=@col1
END
FETCH tb INTO @col1,@col2
END
INSERT @t VALUES(@col1_old,STUFF(@s,1,1,''))
CLOSE tb
DEALLOCATE tb
--显示结果并删除测试数据
SELECT * FROM @t
DROP TABLE tb
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
GO
/*==============================================*/
--3.3.2 使用用户定义函数,配合SELECT处理完成字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
GO
--合并处理函数
CREATE FUNCTION dbo.f_str(@col1 varchar(10))
RETURNS varchar(100)
AS
BEGIN
DECLARE @re varchar(100)
SET @re=''
SELECT @re=@re+','+CAST(col2 as varchar)
FROM tb
WHERE col1=@col1
RETURN(STUFF(@re,1,1,''))
END
GO
--调用函数
SELECT col1,col2=dbo.f_str(col1) FROM tb GROUP BY col1
--删除测试
DROP TABLE tb
DROP FUNCTION f_str
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
GO
/*==============================================*/
--3.3.3 使用临时表实现字符串合并处理的示例
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
--合并处理
SELECT col1,col2=CAST(col2 as varchar(100))
INTO #t FROM tb
ORDER BY col1,col2
DECLARE @col1 varchar(10),@col2 varchar(100)
UPDATE #t SET
@col2=CASE WHEN @col1=col1 THEN @col2+','+col2 ELSE col2 END,
@col1=col1,
col2=@col2
SELECT * FROM #t
/*--更新处理后的临时表
col1 col2
---------- -------------
a 1
a 1,2
b 1
b 1,2
b 1,2,3
--*/
--得到最终结果
SELECT col1,col2=MAX(col2) FROM #t GROUP BY col1
/*--结果
col1 col2
---------- -----------
a 1,2
b 1,2,3
--*/
--删除测试
DROP TABLE tb,#t
GO
/*==============================================*/
--3.3.4.1 每组 <=2 条记录的合并
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'c',3
--合并处理
SELECT col1,
col2=CAST(MIN(col2) as varchar)
+CASE
WHEN COUNT(*)=1 THEN ''
ELSE ','+CAST(MAX(col2) as varchar)
END
FROM tb
GROUP BY col1
DROP TABLE tb
/*--结果
col1 col2
---------- ----------
a 1,2
b 1,2
c 3
--*/
--3.3.4.2 每组 <=3 条记录的合并
--处理的数据
CREATE TABLE tb(col1 varchar(10),col2 int)
INSERT tb SELECT 'a',1
UNION ALL SELECT 'a',2
UNION ALL SELECT 'b',1
UNION ALL SELECT 'b',2
UNION ALL SELECT 'b',3
UNION ALL SELECT 'c',3
--合并处理
SELECT col1,
col2=CAST(MIN(col2) as varchar)
+CASE
WHEN COUNT(*)=3 THEN ','
+CAST((SELECT col2 FROM tb WHERE col1=a.col1 AND col2 NOT IN(MAX(a.col2),MIN(a.col2))) as varchar)
ELSE ''
END
+CASE
WHEN COUNT(*)>=2 THEN ','+CAST(MAX(col2) as varchar)
ELSE ''
END
FROM tb a
GROUP BY col1
DROP TABLE tb
/*--结果
col1 col2
---------- ------------
a 1,2
b 1,2,3
c 3
--*/
GO
相关推荐
SQL代码生成器是一种工具,它自动化了创建SQL脚本的过程,极大地提高了开发人员的效率。在SQL Server环境下,这样的工具尤为重要,因为SQL Server数据库的复杂性和规模常常需要编写大量复杂的查询和数据操作语句。本...
SQL注入是一种攻击手段,攻击者通过在表单输入框或其他用户输入点插入恶意SQL代码,以获取、修改、删除数据库中的敏感信息,甚至控制整个服务器。 标题"最新ASP通用防SQL注入代码"指出这是一个针对ASP平台的最新...
SQL Server 错误代码大全 概述: SQL Server 错误代码大全是一份详细的数据库错误代码大全,涵盖了 SQL Server 中各种可能的错误代码和解决方法。该大全旨在帮助开发者和 DBA 快速地定位和解决 SQL Server 中出现的...
SQL代码大全 SQL 代码大全是一本适合新手入门的指南,旨在帮助读者快速掌握 SQL Sever 的基础知识和实践技能。下面我们将从这个大全中提炼出一些重要的知识点,帮助读者更好地理解和应用 SQL。 数据库的应用 ...
开源的AI自动生成SQL语句源代码,这款SQLCoder-70B-Alpha在文本到SQL的转换能力上超越了包括GPT-4在内的所有通用模型,它能更准确地理解你的需求,并生成相应的SQL查询。SQLCoder2和SQLCoder-7B模型已经向公众开放,...
收集汇总了设计者在SQL 编程中所有出现的错误代码提示大全 希望对大家有所帮助
好用的SQL Server代码格式化插件,有代码提示等功能
1、本地执行代码生成工具,可生成controller、service、...3、可按照资源中提供的建表sql导入到数据库,然后双加start.bat,即可在上方配置的outdir目录中找到生成的代码 4、复制代码到项目目录修修改改即可使用
标题中的“Sqlserver代码辅助工具”指的是用于提升SQL Server数据库管理与开发效率的软件工具,这类工具通常包含自动完成、语法高亮、错误检查和智能提示等功能,旨在帮助程序员更快速、准确地编写和调试SQL代码。...
SQL进阶教程(MICK (作者) 吴炎昌 (译者)) ,随书sql代码.本书是《SQL基础教程》作者MICK为志在向中级进阶的数据库工程师编写的一本SQL技能提升指南。全书可分为两部分,第一部分介绍了SQL语言不同寻常的使用技巧,...
1. **ApexSQL Complete**:这是个强大的SQL代码补全工具,为SQL Server 2016开发人员提供实时的智能提示功能。它不仅支持关键词和对象名的自动完成,还能够识别并提示函数、存储过程、视图等数据库元素。此外,它还...
SQL防注入代码SQL防注入代码SQL防注入代码SQL防注入代码SQL防注入代码SQL防注入代码
"SQL Server 错误代码大全" SQL Server 错误代码大全是指SQL Server数据库管理系统中出现的各种错误代码及其对应的错误信息。这些错误代码涵盖了SQL Server的各个方面,包括系统错误、存储错误、网络错误、打印机...
SQL代码提示插件,如"SQL Assistant",是数据库开发者和管理员的重要工具,尤其是在处理Microsoft SQL Server (MSSQL)时。这款插件为用户提供了一种高效的方式来进行SQL查询编写,通过提供类似PL/SQL Developer中的...
SQL代码生成器是一种工具,它能够自动生成SQL(Structured Query Language)代码,帮助开发者节省时间,提高工作效率。这种工具尤其适用于处理复杂的数据库操作,如创建表、插入数据、更新记录或者执行复杂的查询。...
sql2008 337 实验7代码
"SQL出高级代码、文档大全"这个资源集成了作者在培训期间的学习成果,旨在为学习者提供一套系统的SQL学习资料,帮助大家提升技能并解决实际问题。 SQL,全称Structured Query Language,即结构化查询语言,是用于...
7. **事务和并发控制**:理解事务的概念,包括ACID属性(原子性、一致性、隔离性和持久性),以及SQL Server中的锁机制和死锁处理。 8. **触发器**:了解如何使用触发器来响应数据更改,例如在INSERT、UPDATE或...