雪黛缘
-失业中...QQ:941187431

for xml方式

select * from view_1

select distinct Id,Name, rolekey=

(

    select roleName as [data()] from view_1 where view_1.id =v.id for xml path ('')

)

from view_1 v

原始表 

0000-0000-0000-0001 其他类型? NULL null 1 权限6

0000-0000-0000-0001 其他类型? NULL null 1 权限3

0000-0000-0000-0001 其他类型? NULL null 1 权限5

0000-0000-0000-0001 其他类型? NULL null 1 权限1

0000-0000-0000-0001 其他类型? NULL null 1 权限7

0000-0000-0000-0001 其他类型? NULL null 1 权限2

0000-0000-0000-0001 其他类型? NULL null 1 权限4 

结果表

0000-0000-0000-0001 其他类型? 权限6 权限3 权限5 权限1 权限7 权限2 权限4

 

函数方式

创建函数

USE [Portal]

GO

/****** Object:  UserDefinedFunction [dbo].[ConvertVertToHorz]    Script Date: 10/18/2010 14:34:39 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER FUNCTION [dbo].[ConvertVertToHorz](@Col1Val varchar(50))

RETURNS VARCHAR(8000)

AS

BEGIN

-- 实际项目中,应该考虑 @RetVal 是否会超过 8000 个字符

DECLARE @RetVal varchar(8000)

SET @RetVal = ''

-- 通过递归 SELECT 连接指定列存储到临时变量中

SELECT @RetVal = RoleName + ',' + @RetVal FROM view_1 WHERE id = @Col1Val

-- 连接多列

-- SELECT @RetVal = Column2 + ',' + Column3 + ',' + Column4 + ',' + @RetVal FROM VertToHorzSample WHERE Column1 = @Col1Val

-- 去掉尾巴的 , (逗号)

IF LEN(@RetVal) > 0

SET @RetVal = LEFT(@RetVal, LEN(@RetVal) - 1)

--PRINT @RetVal


RETURN @RetVal

END

 

查询

SELECT distinct Id, dbo.ConvertVertToHorz(Id) rolekey

FROM view_1

 

原始表

0000-0000-0000-0001 其他类型? NULL null 1 权限6

0000-0000-0000-0001 其他类型? NULL null 1 权限3

0000-0000-0000-0001 其他类型? NULL null 1 权限5

0000-0000-0000-0001 其他类型? NULL null 1 权限1

0000-0000-0000-0001 其他类型? NULL null 1 权限7

0000-0000-0000-0001 其他类型? NULL null 1 权限2

0000-0000-0000-0001 其他类型? NULL null 1 权限4 

结果表

0000-0000-0000-0001 权限4,权限2,权限7,权限1,权限5,权限3,权限6 

 

posted on 2010-10-18 17:11  zhuibobo  阅读(470)  评论(0编辑  收藏  举报