好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

多列转1列SqlServer实现oracle10g的wmsys.wm

有这么一个表 create table tb(id int , value varchar ( 10 )) insert into tb values ( 1 , ' aa ' ) insert into tb values ( 1 , ' bb ' ) insert into tb values ( 2 , ' aaa ' ) insert into tb values ( 2 , ' bbb ' ) insert into tb values ( 2 , '

有这么一个表

 create   table  tb(id  int , value  varchar ( 10  ))  
  insert   into  tb  values ( 1 ,  '  aa  '  )  
  insert   into  tb  values ( 1 ,  '  bb  '  )  
  insert   into  tb  values ( 2 ,  '  aaa  '  )  
  insert   into  tb  values ( 2 ,  '  bbb  '  )  
  insert   into  tb  values ( 2 ,  '  ccc  '  )  
  insert   into  tb  values ( 3 ,  '  ddd  '  )  
  insert   into  tb  values ( 3 ,  '  fff  ' )  

需求:把id为3所以数据转为1行。以|分隔

1.把id为3的数据转 xml

xml

select '|'+(value) from tb

where id=3

for xml path('')

效果

2. 去掉第一个 | 替换成空格

需要函数 Stuff,, 类似对字符串操作这样的函数还有 replace() right () left() substring() 看需求使用

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

Transact-SQL 语法约定

语法

 STUFF   (   character_expression   ,   start   ,   length   ,  character_expression   )  

stuff((select '|'+(value) from tb

for xml path('')),1,1,'')

这句无法单独运行

3.最终 实现

 select  id ,value =  stuff (( select   '  |  '  + (value)  from   tb 
  where  id =  3 
 for  xml path( '' )), 1 , 1 , '' )   from  tb  where  id =  3   group   by  id 

ps:去掉一个where 得到的结果是不一样的,不懂为何。group by id 有去重的效果

效果图。没有------------

在oracle 数据库中他也有自己的 实现 。觉得这些东西没有什么的。只要你有需求,必然有答案,只是你接触了没有而已。反正现在编程我们都是站在巨人的肩膀上了。

查看更多关于多列转1列SqlServer实现oracle10g的wmsys.wm的详细内容...

  阅读:46次