oracle中的行转列用逗号隔开,一般使用to_char(wm_concat( pm.FPERSONID ))
而在sqlserver中实现相同效果则需用STUFF((SELECT ',' + convert(varchar(50),pm.FPERSONID) FROM table where xx FOR xml path('')),1,1,'')
STUFF本身是一个将字符串插入到另一个字符串中
STUFF ( character_expression , start , length ,character_expression )
character_expression
一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列。
start
一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个character_expression 长,则返回空字符串。start 可以是 bigint 类型。
length
一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个character_expression 中的最后一个字符。length 可以是 bigint 类型
单独用xml path取出来是xml文件格式
STUFF( (SELECT ',' + convert(varchar(50),pm.FPERSONID)
FROM
T_ORG_Position P
LEFT JOIN T_ORG_POSITIONMEMBER pm ON pm.FPOSITIONID = P.FID
LEFT JOIN T_BD_PERSON pper ON pper.FID = pm.FPERSONID
LEFT JOIN T_HR_EmpOrgRelation re ON re.FPersonID = pm.FPERSONID
AND re.FPositionID = pm.FPOSITIONID
AND re.FAdminOrgID = P.FADMINORGUNITID
AND re.FLEFFDT = '2199-12-31'
AND re.FPositionStatus = '10'
LEFT JOIN T_HR_BDEmployeeType T ON pper.FEmployeeTypeID = T.FID
WHERE
P.FIsRespPosition = '1' AND FUserState=1 AND FinService=1
AND P.FDeletedStatus = '1' AND pper.fid IS NOT NULL AND p.FADMINORGUNITID = t1.fid
FOR xml path('')),1,1,'')