-
sql server 使用for xml path 将1列多行转换为字符串连接起来
- create table tb ([id] int,[name] varchar(2))
- insert into tb
- select 1,'aa' union all
- select 2,'bb' union all
- select 1,'cc' union all
- select 3,'dd' union all
- select 2,'ee'
-
- select * from tb
-
- select
- id,
- name=stuff((select ','+name from tb where id=t.id for xml path('')),1,1,'')
- from
- tb t
- group by
- id
-
-
-
- 方法二:
-
- CREATE FUNCTION GET_STRING(@ID INT)
- RETURNS VARCHAR(50)
- AS
- BEGIN
- DECLARE @NAME VARCHAR(500)
- SELECT @NAME=ISNULL(@NAME+',','')+NAME FROM TB WHERE ID=@ID
- RETURN @NAME
- END
-
-
- SELECT ID ,DBO.GET_STRING(ID)NAME FROM TB GROUP BY ID
-
-
- 在oracle中,是有相对应的函数,sys_connect_by_path函数。
-
- 先在这里把oracle的函数实现也写下吧
-
- select id
- ,itrim(max(sys_connect_by_path(name,','))) as name
- from
- (select id
- ,name
- ,lead(rnFirst) over(partition by no order by rnFirst)rnNext
- from
- (select a.id
- ,a.name
- ,row_number() over(order by a.id,a.name desc) rnFirst
- from @t a) tmpTable1
- ) tmpTable2
- start with rnNext is null
- connect by rnNext = PRior rnFirst
- group by id
-
- 以上是实现oracle中的行转列方式。
-
- ********************************************下面我们来看一下sqlserver的,因为sqlserver没提供类似的函数,不知道sqlserver2012提供没
-
- 不过sqlserver支持起来也很简单,使用cross apply和for xml path组合来用,这两个单独都知道是怎么回事,怎么使用,但是真不知道还有它俩组合来完成这个功能的,感到很是不可思议,这里要感谢下网络上的人,原来自己写东西都是把所学到的知识记录到本机,从不放到网上,也可能是最近吧,好多工作不会,都是通过网络帮助,就把我所知道的东西也都放到网上来,大家一起学习。
-
- sqlserver:
-
- select id, SUBSTRING(names, 1, len(names)-1) from @t AS A cross APPLY
- (SELECT NAME + ',' FROM @t AS B WHERE A.id = B.id FOR XML PATH('')) D (names)
-
- GROUP BY id, names
-
相关阅读:
转:POI操作Excel:cell的背景颜色类型
在table中tr的display:block在firefox下显示布局错乱问题
[转]:颜色 16进制对照表
js时间操作
SQL 复制数据库里面的表到另一个表
js 去除空格
判断一个表单是否被修改过
判断数据库,函数名,表名,存储过程名称等是否存在
JS 获取radiobuttonlist checkboxlist的值
Asp 结合JQuery EasyUI 框架完成的一个增删改查
-
原文地址:https://www.cnblogs.com/jazzka702/p/3051520.html
Copyright © 2020-2023
润新知