教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 数据库类教程 · MSSQL教程 · MsSql综合技巧

sql中能否完成下面要求?

学院最新推荐文章
教程推荐
『sql中能否完成下面要求?』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2008-9-26 
表的数据如下例:
1    广州
1    深圳
2    广州
3    广州
4    深圳
4    东莞

要查询出来按照
1    广州、深圳
2    广州
3    广州
4    深圳、东莞

这个问题第1个回答:
写个函数

SQL code

create function fn_addrs(

@id int

) 

returns varchar(300)

as

begin

   declare @r varchar(300)

   select @r=isnull(@r+'、','')+addr from tablename where id=@id

   return @r

end

go



--调用

select id,dbo.fn_addrs(id) as addrs

from tablename

group by id


这个问题第2个回答:
合并分拆表数据
http://topic.csdn.net/u/20080612/22/c850499f-bce3-4877-82d5-af2357857872.html

这个问题第3个回答:
2005用XML
SQL code

select  

    a.Col1,Col2=stuff(b.Col2.value('/R[1]','nvarchar(max)'),1,1,'') 

from  

    (select distinct COl1 from @T) a 

Cross apply 

    (select COl2=(select N'、'+Col2 from @T where Col1=a.COl1 For XML PATH(''), ROOT('R'), TYPE))b 


这个问题第4个回答:
完全可以,邹老大就讲过这个实例.建立一个函数,合并行列.
create function dbo.func_merga(
@id int
)
returns varchar(8000)
as
begin
  declare @sql varchar(8000)
  select @sql=isnull(@r+',','')+地名 from 表名 where id=@id
  return stuff(@sql,1,1,'')
end
--使用实例
select id,dbo.func_merga(id) as 地名
from 表名
group by id

这个问题第5个回答:
行列合并。
这个问题第6个回答:
SQL code

if object_id('dbo.FN_addrs')is not null drop function FN_addrs

go

create function fn_addrs(

@id int

) 

returns varchar(300)

as

begin

   declare @r varchar(300)

   select @r=isnull(@r+'、','')+city from tb where id=@id

   return @r

end

go

if object_id('tb')is not null drop table  tb

go

create  table tb (ID int ,city varchar(10))

insert tb select 1,    '广州' 

insert tb select 1,    '深圳' 

insert tb select 2,    '广州' 

insert tb select 3,    '广州' 

insert tb select 4,    '深圳' 

insert tb select 4,    '东莞'

select distinct ID,dbo.FN_addrs(id)cityadd from tb

ID          cityadd                                                                                                                                                                                                                                                          

----------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

1           广州、深圳

2           广州

3           广州

4           深圳、东莞



(所影响的行数为 4 行)


这个问题第7个回答:
合并列值
原著:邹建
改编:爱新觉罗.毓华(十八年风雨,守得冰山雪莲花开)  2007-12-16  广东深圳

表结构,数据如下:
id    value
----- ------
1    aa
1    bb
2    aaa
2    bbb
2    ccc

需要得到结果:
id    values
------ -----------
1      aa,bb
2      aaa,bbb,ccc
即:group by id, 求 value 的和(字符串相加)

1. 旧的解决方法(在sql server 2000中只能用函数解决。)
--1. 创建处理函数
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

CREATE FUNCTION dbo.f_str(@id int)
RETURNS varchar(8000)
AS
BEGIN
    DECLARE @r varchar(8000)
    SET @r = ''
    SELECT @r = @r + ',' + value FROM tb WHERE id=@id
    RETURN STUFF(@r, 1, 1, '')
END
GO

-- 调用函数
SELECt id, value = dbo.f_str(id) FROM tb GROUP BY id

drop table tb
drop function dbo.f_str

/*
id          value     
----------- -----------
1          aa,bb
2          aaa,bbb,ccc
(所影响的行数为 2 行)
*/

--2、另外一种函数.
create table tb(id int, value varchar(10))
insert into tb values(1, 'aa')
insert into tb values(1, 'bb')
insert into tb values(2, 'aaa')
insert into tb values(2, 'bbb')
insert into tb values(2, 'ccc')
go

--创建一个合并的函数
create function f_hb(@id int)
returns varchar(8000)
as
begin
  declare @str varchar(8000)
  set @str = ''
  select @str = @str + ',' + cast(value as varchar) from tb where id = @id
  set @str = right(@str , len(@str) - 1)
  return(@str)
End
go

--调用自定义函数得到结果:
select distinct id ,dbo.f_hb(id) as value from tb

drop table tb
drop function dbo.f_hb

/*
id          value     
----------- -----------
1          aa,bb
2          aaa,bbb,ccc
(所

[1] [2] 下一页  

作者:cppsun 来源:C.S.D.N
】【关闭窗口
·上页:
·下页:
相关文章
     数据库类教程 - MsSql综合技巧
普通教程【脑袋快想爆炸了- -!】 怎么样
普通教程关于级联删除地疑难,新手提问,
普通教程怎么样动态控制列数?
普通教程数据库恢复 MS2000
普通教程当数据库中varchar字段值为null
普通教程create function 怎么才无法要返
普通教程各位帮我看看是啥疑难啊, SQL运
普通教程SQL server 2005 安装疑难 SP2更
普通教程sql update
普通教程update触发器地疑难
普通教程字符串地查询疑难
普通教程安全性--登陆--想建一个用户tes
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光