time 
设为首页】【收藏本站
当前位置: 主页 > 数据库 > SQL Server > SQL 基础 > 为SQL Server的文本字段实现类似"求和"的效果

为SQL Server的文本字段实现类似"求和"的效果

时间:2010-05-04 23:02 点击:2015次 字体:[ ]




在SQL Server里面,针对数字字段,我们可以用SUM函数求出多个值的总和。有的时候,我们需要为文本值实现类似的效果。例如

有一个表包含了计算机的基础信息,而另外一个表包含了IP地址信息。一个计算机可能对应了多个IP地址。如果我希望按照计算机分组,然后统计它所有的IP地址,那么该怎么办呢?

你可以通过下面的范例找到答案。我们的实现手段是通过一个函数来做。该函数接受两个参数,一个就是计算机的编号,一个则是我们希望连接字符串的分隔符。

这个函数的核心是使用了游标。 值得注意的是,下面的脚本你最好是每段注释下面的代码作为一个单独的批执行,而不要一次性全部执行。方法就是:选择每个注释下面的代码,然后按F5
 

 

为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com--创建范例数据库
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
CREATE DATABASE DEMO
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
GO 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
USE DEMO
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
GO 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
--创建两个表
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
CREATE TABLE Computer(ID INT,ComputerName NVARCHAR(10))
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
GO 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
CREATE TABLE IPAddress(ComputerID INT,IPAddress NVARCHAR(20))
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
GO 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
--增加10笔记算机记录,每个计算机增加2个IP地址
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
DECLARE @I INT
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
SET @I=1;
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
WHILE(@I<10)
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
BEGIN
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
INSERT INTO Computer VALUES(@I,'Computer'+CONVERT(NVARCHAR(2),@I))
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
INSERT INTO IPAddress VALUES(@I,'IPAddress '+ CONVERT(NVARCHAR(2),@I))
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
INSERT INTO IPAddress VALUES(@I,'IPAddress '+ CONVERT(NVARCHAR(2),@I+1))
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
SET @I=@I+1
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
END
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
GO 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
--查看两个表的资料
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
SELECT * FROM Computer
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
SELECT * FROM IPAddress
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
--合并查看两个表单资料
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
SELECT C.*,I.* FROM Computer C JOIN IPAddress I ON C.ID=I.ComputerID
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
--创建函数来处理字符串的合并
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
CREATE FUNCTION SumString(@ID INT,@Dismember NVARCHAR(10))
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
RETURNS NVARCHAR(1000)
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
AS
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
BEGIN
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
DECLARE IPCursor CURSOR FOR 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
SELECT IPAddress FROM IPAddress WHERE ComputerID=@ID 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
DECLARE @RESULT NVARCHAR(1000)
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
DECLARE @IP NVARCHAR(20)
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
SET @RESULT=N''   
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
OPEN IPCursor
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
FETCH NEXT FROM IPCursor INTO @IP
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
WHILE @@FETCH_STATUS=0
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
BEGIN
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com       
IF(@RESULT=N'')
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com           
SET @RESULT=@IP
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com       
ELSE
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com           
SET @RESULT=@RESULT+@Dismember+@IP
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com       
FETCH NEXT FROM IPCursor INTO @IP
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
END 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
CLOSE IPCursor
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
DEALLOCATE IPCursor
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com   
RETURN @RESULT
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
END
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
GO 
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
--最后做联合查询显示,其实这个时候已经用不着第二个表了
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com
SELECT ID,ComputerName,dbo.SumString(ID,N',') AS IPAddressList FROM Computer GROUP BY ID,ComputerName
为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com



通过下面三个截图,可以很明显地看到区别

为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com 为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com 为SQL Server的文本字段实现类似"求和"的效果_www.fengfly.com

转自:http://www.cnblogs.com/chenxizhang/archive/2008/06/23/1228380.html



本文地址 : http://www.fengfly.com/plus/view-174702-1.html
标签: SQL Server 求和 文本字段
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: