风之语者

博客园 首页 新随笔 联系 订阅 管理

示例表 tb 数据如下

id   value
—————
1    aa
1    bb
2    aaa
2    bbb
2    ccc

第一种

Sql代码  收藏代码
  1. SELECT id,   
  2.        [val]=( SELECT [value] +','   
  3.                FROM tb AS b   
  4.                WHERE b.id = a.id   
  5.                FOR XML PATH('')  )   
  6. FROM tb AS a    

   第一种显示结果 
   1 aa,bb, 
   1 aa,bb, 
   2 aaa,bbb,ccc, 
   2 aaa,bbb,ccc, 
   2 aaa,bbb,ccc,

第二种

Sql代码  收藏代码
  1. SELECT id,   
  2.             [val]=( SELECT [value] +','   
  3.                     FROM tb AS b   
  4.                     WHERE b.id = a.id   
  5.                     FOR XML PATH('')  )   
  6. FROM tb AS a    
  7. GROUP BY id    

   第二种显示结果  
   1 aa,bb,  
   2 aaa,bbb,ccc, 

第三种  (用STUFF函数替换掉首端的逗号)

Sql代码  收藏代码
  1. SELECT id,   
  2.        [val]=STUFF( (SELECT ','+[value]   
  3.                      FROM tb AS b   
  4.                      WHERE b.id = a.id   
  5.                      FOR XML PATH('')) , 1 , 1 , '' )  
  6. FROM tb AS a    
  7. GROUP BY id    

   第三种显示结果  
   1 aa,bb  
   2 aaa,bbb,ccc


STUFF 函数将字符串插入另一字符串。它在第一个字符串中从开始位置删除指定长度的字符;然后将第二个字符串插入第一个字符串的开始位置。
          STUFF ( character_expression , start , length ,character_expression_insert )

第四种  (用REPLACE函数将所有空格替换成逗号)

Sql代码  收藏代码
  1. SELECT id,   
  2.        [val]= REPLACE( (SELECT [value] AS [data()]  
  3.                         FROM tb AS b   
  4.                         WHERE b.id = a.id   
  5.                         FOR XML PATH('')) , ' '',')  
  6. FROM tb AS a    
  7. GROUP BY id    

 结果与第三种一样,最为理想。

解析:[data()] 这里据说是起到一个类似数组的作用,具体用法还要再查。

如果外围不用REPLACE函数包住,则返回的结果是 aaa bbb ccc ,每项之间有空格,所以最后用REPLACE函数将所有空格替换成逗号。

转自:http://calhaha.iteye.com/blog/986613

posted on 2011-06-21 14:03  风之语者  阅读(302)  评论(0编辑  收藏  举报