看了水兄的关于字符串处理的2005方法,很好,就是没看懂,最后把相关知识帖了,放进我的博客里,供自己和大家学习。

如题  记录
    a        b          c        d
    1        2001a      退      2001-10-1
    2        2001a      拔      2001-10-1
    3        2001a      洗      2001-10-1
    4        2001b      拔      2001-10-1
    5        2001b      洗      2001-10-1
  .........


生成记录为
    a        b          c        d            e
    1        2001a      退      2001-10-1    [退],拔,洗
    2        2001a      拔      2001-10-1    退,[拔],洗
    3        2001a      洗      2001-10-1    退,拔,[洗]
    4        2001b      拔      2001-10-1    [拔],洗
    5        2001b      洗      2001-10-1    拔,[洗]
  .........

e 字段生成规则是根据b 分组,顺序按a排,[]表示对应的当前的c字段

  • wufeng4552
  • (【水族杰纶】)
  •  

    大家都知道在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。
    DECLARE @TempTable table(UserID int , UserName nvarchar(50));
    insert into @TempTable (UserID,UserName) values (1,'a')
    insert into @TempTable (UserID,UserName) values (2,'b')
     
    select UserID,UserName from @TempTable FOR XML PATH
    运行这段脚本,将生成如下结果:
    <row>
      <UserID>1</UserID>
      <UserName>a</UserName>
    </row>
    <row>
      <UserID>2</UserID>
      <UserName>b</UserName>
    </row>
    大家可以看到两行数据生成了两个节点,修改一下PATH的参数:
    select UserID,UserName from @TempTable FOR XML PATH('lzy')
    再次运行上述脚本,将生成如下的结果:
    <lzy>
      <UserID>1</UserID>
      <UserName>a</UserName>
    </lzy>
    <lzy>
      <UserID>2</UserID>
      <UserName>b</UserName>
    </lzy>
    可以看到节点变成,其实PATH() 括号内的参数是控制节点名称的,这样的话大家可以看一下如果是空字符串(不是没有参数)会是什么结果?
    select UserID,UserName from @TempTable FOR XML PATH('')
    执行上面这段脚本将生成结果:
    <UserID>1</UserID>
    <UserName>a</UserName>
    <UserID>2</UserID>
    <UserName>b</UserName>
    这样就不显示上级节点了,大家知道在 PATH 模式中,列名或列别名被作为 XPath 表达式来处理,也就是说,是列的名字,这样大胆试验一下不给指定列名和别名会是怎么样?
    select CAST(UserID AS varchar) + '',UserName + '' from @TempTable FOR XML PATH('')
    运行上面这句将生成结果
    1a2b
    所有数据都生成一行,而且还没有连接字符,这样的数据可能对大家没有用处,还可以再变化一下:
    select CAST(UserID AS varchar) + ',',UserName + '',';' from @TempTable FOR XML PATH('')
    生成结果
    1,a;2,b;
    大家现在明白了吧,可以通过控制参数来生成自己想要的结果,例如:
    select '{' + CAST(UserID AS varchar) + ',','"' +UserName + '"','}' from @TempTable FOR XML PATH('')
    生成结果
    {1,"a"}{2,"b"}

    再看看水哥写的
    select ' , ' + [ c ] from tb where [ b ] = t. [ b ] for xml path( '' ) 
    生成:
    ,退,拔,洗   
     基础知识懂了,就是那么简单,但是要常用才会灵活运用哦。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值