表的结构如下:
姓名 身份证 其他名称
张三 330124197905255745 test1
张三 330124197905255745 test2
李四 330328197905255859 test3
李四 330328197905255859 test4
. .
. .
. .
显示为
姓名 身份证 其他名称
张三 330124197905255745 test1,test2
李四 330328197905255859 test3,test4即:将姓名和身份证一样的人员显示为一条,并将多个其他名称用","分隔显示为一个字段
姓名 身份证 其他名称
张三 330124197905255745 test1
张三 330124197905255745 test2
李四 330328197905255859 test3
李四 330328197905255859 test4
. .
. .
. .
显示为
姓名 身份证 其他名称
张三 330124197905255745 test1,test2
李四 330328197905255859 test3,test4即:将姓名和身份证一样的人员显示为一条,并将多个其他名称用","分隔显示为一个字段
create function F_Str(@id varchar(30))
returns varchar(250)
as
begin
declare @sql varchar(1000)
set @sql=''
select @sql=@sql+'/'+orderformno_serial from view1 where [outputgoodsnum]=@id --STUFF ( character_expression1 , start , length ,character_expression2).
--字符串char1从start开始的第length位字符用char2字符串代替
return stuff(@sql,1,1,'')
end
要用函数
;)雄关漫道真如铁 , 而今迈步从头越
--sql 2000 就用一个函数.
CREATE TABLE A(姓名 VARCHAR(20),身份证 BIGINT,其他名称 VARCHAR(20))
INSERT INTO A SELECT '张三',330124197905255745,'test1'
UNION ALL SELECT '张三',330124197905255745,'test2'
UNION ALL SELECT '李四',330328197905255859,'test3'
UNION ALL SELECT '李四',330328197905255859,'test4'
-- 查询处理
SELECT *
FROM(
SELECT DISTINCT
姓名,身份证
FROM A
)A
OUTER APPLY(
SELECT
[values]= STUFF(REPLACE(REPLACE(
(
SELECT 其他名称 FROM A N
WHERE 姓名 = A.姓名 and 身份证=a.身份证
FOR XML AUTO
), '<N 其他名称="', ','), '"/>', ''), 1, 1, ''))N/*
-------------------- ---------------------------
李四 330328197905255859 test3,test4
张三 330124197905255745 test1,test2(2 行受影响)
*/
to:zlp321002(龙卷风2006)
为什么用这种方法,会出现下面的错误?我用的是SQL SERVER2000
服务器: 消息 156,级别 15,状态 1,行 6
在关键字 'OUTER' 附近有语法错误。
服务器: 消息 170,级别 15,状态 1,行 12
第 12 行: 'XML' 附近有语法错误。