sqlserver中的行转列

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,'') 
 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值