合并多行的某一列值

简介:

--合并多行的某一列值 
--
stuff:删除指定的字符,并在指定的起点处插入另一组字符。 
create table tb 
(id 
int,col1 varchar(10)) 
go 

insert tb select 1 , '曾祥展'   
insert tb select 1 , '学无止境'  
insert tb select 1 , 'ok' 
insert tb select 2 , 'B' 

drop table tb 

--函数 
create function StrLink(@id int
returns varchar(8000
as 
begin  
declare @sql varchar(8000)      
set @sql=''  
select @sql=@sql+','+col1 from tb where id=@id  
set @sql=stuff(@sql,1,1,'')  
return @sql 
end 

drop function StrLink 


select * from tb 
select col=dbo.StrLink(1

/* 

id   col1 
----------- 
1    曾祥展 
1    学无止境 
1    ok 
2    B 


     col 
------------------ 
曾祥展,学无止境,ok 

*/

 

 

 declare @Temp TABLE([Col1] varchar(50), [Col2] varchar(100)) 

Insert  @Temp   
Select  ' a ' ' asd '  union 
Select  ' a ' ' rdf '  union 
Select  ' a ' ' dmg '  union 
Select  ' b ' ' kk '  union 
Select  ' b ' ' useh ' 
-- 第一种方法
select  a. [ Col1 ] , stuff (( select ' , ' + b. [ Col2 ]  from  @Temp  as  b  where  a. [ Col1 ]  =  b. [ Col1 ]  for  xml path( '' )), 1 , 1 , '' as  res 
from  @Temp  a 
group  by  a. [ Col1 ] 

-- 或者
SELECT  DISTINCT
[ Col1 ] ,
[ Col2 ]  =  SUBSTRING ((  SELECT  ' '  +  [ Col2 ]  as  [ text() ]
FROM  @Temp  t2
WHERE  t2.Col1  =  t1.Col1
FOR  XML path( '' ), elements
),  2 100
)
FROM  @Temp  t1


--结果:
          a asd,dmg,rdf 
          b kk,useh

 

 

 

广西壮族自治区,玉林市,玉州区

 

复制代码
create index ix_id on 中国(id)
create index ix_pid on 中国(pid)

    
   -- update dbo.中国 set allname= dbo.GetAllName(id)  
   -- select   dbo.GetAllName(450902)
   
create function GetAllName (@id int)
returns varchar(8000)
as 
    begin  
        declare @sql varchar(8000)      
        set @sql='';
            with    T(flag, id, pid, [name])
                      as (select    @id as flag, id, pid, [name]
                          from      中国 a
                          where     1=1 and a.id=@id
                          union all
                          select    @id as flag, b.id, b.pid, b.[name]
                          from      中国 b
                          inner join T c on c.pid=b.id)
                 --  SELECT   *       FROM     T   WHERE pid !=0      
select  @sql=@sql+','+[name]
from    T
where   id!=1
order by id 
        set @sql=stuff(@sql, 1, 1, '')  
        return @sql

    end
复制代码

 

    本文转自曾祥展博客园博客,原文链接:http://www.cnblogs.com/zengxiangzhan/archive/2010/01/03/1638169.html,如需转载请自行联系原作者


相关文章
|
Ubuntu Linux 测试技术
下载ISO镜像的方法 Debian、Red Hat 、CentOS、Ubuntu、Kali Linux🌐
Debian、Red Hat、CentOS、Ubuntu与Kali Linux均为知名Linux发行版。下载Debian须访问官网并按计算机架构选ISO文件。Red Hat下载通常需订阅账户,可从官网登录后获取。CentOS可从官网或镜像站点下载,注意CentOS 8已停更。Ubuntu下载简便,官网直接选取版本及架构即可。Kali Linux专为安全测试设计,官网提供直接下载ISO镜像服务。
3483 0
[笔记]音视频学习之SDL篇《四》事件驱动的编程
[笔记]音视频学习之SDL篇《四》事件驱动的编程
137 0
|
前端开发
【SpringMVC】SpringMVC配置拦截器 mvc:exclude-mapping 报错
转载请注明出处:http://blog.csdn.net/qq_26525215 本文源自【大学之旅_谙忆的博客】 今天写SpringMVC的拦截器的时候,遇到这样一个错误, Element mvc:exclude-mapping is not allowed here. 经过一番搜索,找到了原因。
2232 0
|
4天前
|
搜索推荐 编译器 Linux
一个可用于企业开发及通用跨平台的Makefile文件
一款适用于企业级开发的通用跨平台Makefile,支持C/C++混合编译、多目标输出(可执行文件、静态/动态库)、Release/Debug版本管理。配置简洁,仅需修改带`MF_CONFIGURE_`前缀的变量,支持脚本化配置与子Makefile管理,具备完善日志、错误提示和跨平台兼容性,附详细文档与示例,便于学习与集成。
296 116
|
19天前
|
域名解析 人工智能
【实操攻略】手把手教学,免费领取.CN域名
即日起至2025年12月31日,购买万小智AI建站或云·企业官网,每单可免费领1个.CN域名首年!跟我了解领取攻略吧~
|
7天前
|
数据采集 人工智能 自然语言处理
Meta SAM3开源:让图像分割,听懂你的话
Meta发布并开源SAM 3,首个支持文本或视觉提示的统一图像视频分割模型,可精准分割“红色条纹伞”等开放词汇概念,覆盖400万独特概念,性能达人类水平75%–80%,推动视觉分割新突破。
460 44
Meta SAM3开源:让图像分割,听懂你的话
|
13天前
|
安全 Java Android开发
深度解析 Android 崩溃捕获原理及从崩溃到归因的闭环实践
崩溃堆栈全是 a.b.c?Native 错误查不到行号?本文详解 Android 崩溃采集全链路原理,教你如何把“天书”变“说明书”。RUM SDK 已支持一键接入。
684 222