论坛首页 综合技术论坛

(SQL)同一列的多行字符串数据怎么转换成同一列的一行数据?

浏览 8153 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-02-29  

            同一列的多行字符串数据用SQL怎么转换成同一列的一行数据?

 

比如:我用select department,userName from users从表中查询出如下数据

department | userName

---------------   --------------

it                   it1

it                   it2

it                   it3

ur                  ur1

ur                  ur2

 

我能不能用什么SQL对department进行分组然后变成如下的结果呢?

department | userName

---------------   --------------

it                   it1_it2_it3

ur                  ur1_ur2

 

似乎行列转换中只能对那些采用聚合函数的才能转换,这个东东就不知道在SQL中怎么办?谢谢!

 

 

   发表时间:2008-03-03  
原本想找一个比较简单的一条SQL能搞定的,没有找到.
我还是用了比较笨的办法,采用游标去遍历他们,然后连接起来,这样就比较繁琐麻烦.
0 请登录后投票
   发表时间:2008-03-10  
Oracle 8i及以上:
drop table users
/
create table users
(department varchar2(20),
 userName  varchar2(20)
)
/
insert into users
values('it','it1');
insert into users
values('it','it2');
insert into users
values('it','it3');
insert into users
values('ur','ur1');
insert into users
values('ur','ur2');
commit
/
select max(count(*))
from users
group by department;
--
select department,
       decode(substr(usernames, -1),
              '_',
              substr(usernames, 1, length(usernames) - 1),
              usernames)
  from (select department,
               max(decode(rn, 1, userName, null)) || '_' ||
               max(decode(rn, 2, userName, null)) || '_' ||
               max(decode(rn, 3, userName, null)) usernames
          from (select department,
                       userName,
                       row_number() over(partition by department order by userName) rn
                  from users)
         group by department);
--


nested subquery,regardless of performance.
0 请登录后投票
   发表时间:2008-03-25  
1。sql来改完全是哎,不好说得,效率极低。要是表大了,基本没有反应了。
2.处理这种一般在程序里处理或者存储过程来处理
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics