查看: 4190|回复: 11

[原创] 请教一个SQL拼字符串的问题

[复制链接]
论坛徽章:
0
跳转到指定楼层
1#
发表于 2011-10-25 17:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 123628056 于 2011-10-26 10:53 编辑

请教各位一个问题 .



A  B
1  a1
1  a2
2  c
3  f
4  d1
4  d2


将B列拼成一个字符串,但对应的A列的ID不能重复。
以上数据对应的结果为:
a1,c,f,d1
a1,c,f,d2
a2,c,f,d1
a2,c,f,d2
-----------------------
感谢 aihuong 的解答,谢谢!   。

再请教各位一个问题。如何对连接的字符串排序? (因提供的数据本身就是有序的,不会乱序)
如连接后的字符串: 10,38,7,85,2
最终需求的字符串: 2,7,10,38,85


求职 : 数据库开发
论坛徽章:
27
至尊黑钻
日期:2015-10-19 09:57:44红钻
日期:2015-10-19 09:57:06ITPUB15周年纪念
日期:2018-10-26 11:37:06
2#
发表于 2011-10-25 18:42 | 只看该作者
with a as (
select 1 A ,'a1' B from dual union all
select 1 , 'a2' from dual union all
select 2 , 'c' from dual union all
select 3 , 'f' from dual union all
select 4 , 'd1' from dual union all
select 4 , 'd2' from dual )
select ltrim(sys_connect_by_path(b,','),',')
from a
where CONNECT_BY_ISLEAF=1
start with A=1
connect by prior A=A-1

使用道具 举报

回复
论坛徽章:
0
3#
 楼主| 发表于 2011-10-25 19:35 | 只看该作者
aihuong 发表于 2011-10-25 18:42
with a as (
select 1 A ,'a1' B from dual union all
select 1 , 'a2' from dual union all


学习了, 谢谢

使用道具 举报

回复
论坛徽章:
1
2012新春纪念徽章
日期:2012-01-04 11:56:19
4#
发表于 2011-10-25 22:00 | 只看该作者
又学到了一个新东西

使用道具 举报

回复
论坛徽章:
4
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:51灰彻蛋
日期:2011-11-07 07:32:08蛋疼蛋
日期:2011-12-26 14:19:11蛋疼蛋
日期:2012-04-07 01:24:00
5#
发表于 2011-10-25 23:33 | 只看该作者
aihuong 发表于 2011-10-25 18:42
with a as (
select 1 A ,'a1' B from dual union all
select 1 , 'a2' from dual union all


with a as (
select 1 A ,'a1' B from dual union all
select 1 , 'a2' from dual union all
select 2 , 'c' from dual union all
select 3 , 'f' from dual union all
select 4 , 'd1' from dual union all
select 4 , 'd2' from dual )
select ltrim(sys_connect_by_path(b,','),',')
from a
where CONNECT_BY_ISLEAF=1
start with A=1
connect by prior A=A-1


有些复杂,还要好好学习一下。

使用道具 举报

回复
论坛徽章:
9
生肖徽章2007版:羊
日期:2009-08-24 09:30:46ITPUB9周年纪念徽章
日期:2010-10-08 09:32:252011新春纪念徽章
日期:2011-02-18 11:42:49SQL大赛参与纪念
日期:2011-04-13 12:08:17ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31奥运纪念徽章
日期:2012-12-06 09:21:402013年新春福章
日期:2013-02-25 14:51:24
6#
发表于 2011-10-26 10:21 | 只看该作者
aihuong 发表于 2011-10-25 18:42
with a as (
select 1 A ,'a1' B from dual union all
select 1 , 'a2' from dual union all

不错,递归写法!

使用道具 举报

回复
论坛徽章:
0
7#
 楼主| 发表于 2011-10-26 10:26 | 只看该作者
aihuong 发表于 2011-10-25 18:42
with a as (
select 1 A ,'a1' B from dual union all
select 1 , 'a2' from dual union all

再请教一个问题。

如何连接的字符串排序? (因我提供的数据本身就是有序的)

使用道具 举报

回复
论坛徽章:
9
生肖徽章2007版:羊
日期:2009-08-24 09:30:46ITPUB9周年纪念徽章
日期:2010-10-08 09:32:252011新春纪念徽章
日期:2011-02-18 11:42:49SQL大赛参与纪念
日期:2011-04-13 12:08:17ITPUB十周年纪念徽章
日期:2011-11-01 16:23:262012新春纪念徽章
日期:2012-01-04 11:53:29ITPUB 11周年纪念徽章
日期:2012-10-09 18:07:31奥运纪念徽章
日期:2012-12-06 09:21:402013年新春福章
日期:2013-02-25 14:51:24
8#
发表于 2011-10-26 10:38 | 只看该作者
123628056 发表于 2011-10-26 10:26
再请教一个问题。

如何连接的字符串排序? (因我提供的数据本身就是有序的)

-- 这样行不?
scott@TBWORA> with a as (select 1 A ,'a1' B from dual union all
  2             select 1 , 'a2' from dual union all
  3             select 2 , 'c' from dual union all
  4             select 3 , 'f' from dual union all
  5             select 4 , 'd1' from dual union all
  6             select 4 , 'd2' from dual ),
  7       b as (select ltrim(sys_connect_by_path(b,','),',') st
  8               from a
  9              where CONNECT_BY_ISLEAF=1
10              start with A=1
11            connect by prior A=A-1 )
12  select * from b
13  order by st;

ST
-------------------------------------------------------------------------------------

a1,c,f,d1
a1,c,f,d2
a2,c,f,d1
a2,c,f,d2

使用道具 举报

回复
论坛徽章:
0
9#
 楼主| 发表于 2011-10-26 10:52 | 只看该作者
luoyoumou 发表于 2011-10-26 10:38
-- 这样行不?
scott@TBWORA> with a as (select 1 A ,'a1' B from dual union all
  2             se ...

谢谢,需求是连接字符串时对字符串本体进行排序

比如连接出来是  10,38,7,85,2
排序后 2,7,10,38,85

使用道具 举报

回复
求职 : 数据库开发
论坛徽章:
27
至尊黑钻
日期:2015-10-19 09:57:44红钻
日期:2015-10-19 09:57:06ITPUB15周年纪念
日期:2018-10-26 11:37:06
10#
发表于 2011-10-26 10:59 | 只看该作者
123628056 发表于 2011-10-26 10:52
谢谢,需求是连接字符串时对字符串本体进行排序

比如连接出来是  10,38,7,85,2

http://www.itpub.net/thread-1504581-1-1.html  版主提供了很多方法,应该能解决你的问题

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表