求一高效率sql

ghjahtt 2012-09-13 10:19:15
现有如果情况的数据 一张表有下列数据
X Y Z
1 11 a
1 12 b
1 13 c
3 31 e
3 32 f
注:表中每条数据肯定会有另一与之X相等的数据 即X某一值肯定会出现两次以上

我想查询时查询结果是 (查出所有与X值相同的数据的Y字段并把Y拼接成字符串)
X Y Z
1 12,13 a
1 11,13 b
1 11,12 c
3 32 e
3 31 f

注:表中数据可能上千万,但一般同一X对应Y的值不会超过100个 求大侠指教啊,效率最好高点啊
...全文
145 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
jamig 2012-09-14
  • 打赏
  • 举报
回复
这种思考方式的确不错,但如果XY都相同的情况出现,可能就不符合题意了。

根据题意可以引入rowid和distinct去重
jdsnhan 2012-09-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

你妹的csdn 我的2楼哪里去了,里面有解决的sql,擦的。。。。。
[/Quote]

2楼。。。。。。
BenChiM888 2012-09-14
  • 打赏
  • 举报
回复
你妹的csdn 我的2楼哪里去了,里面有解决的sql,擦的。。。。。
fw0124 2012-09-13
  • 打赏
  • 举报
回复
create table t(X int,  Y int,  Z varchar2(10));
insert into t values(1, 11, 'a');
insert into t values(1, 12, 'b');
insert into t values(1, 13, 'c');
insert into t values(1, 1211, 'g');
insert into t values(3, 31, 'e');
insert into t values(3, 32, 'f');


with t1 as (
select x, y, z, ','||wm_concat(y) over (partition by x)||',' y1 from t
)
select x,
regexp_replace(regexp_replace(replace(y1, ','||y||',', ','), '^,',''), ',$', '') y,
z from t1;

---结果--
X Y Z
---------- -------------------- ----------
1 12,1211,13 a
1 11,1211,13 b
1 11,12,13 g
1 11,12,1211 c
3 31 f
3 32 e


说说思路,
先把相同X的Y用wm_concat合并成 ,11,12,13,1211, 的字符串S
然后,例如,
对于Y=11的行,从S中替换 ,11, 成为 , 这样S=,12,13,1211,
对于Y=12的行,从S中替换 ,12, 成为 , 这样S=,11,13,1211,
...
然后去掉S前面的,
然后去掉S后面的,
BenChiM888 2012-09-13
  • 打赏
  • 举报
回复
你妹的csdn 我的2楼哪里去了,里面有解决的sql,擦的。。。。。
ORAClE SE 2012-09-13
  • 打赏
  • 举报
回复
没法实现。。。
ORAClE SE 2012-09-13
  • 打赏
  • 举报
回复
没法实现。。。
BenChiM888 2012-09-13
  • 打赏
  • 举报
回复

SELECT X,
RTRIM(LTRIM(REPLACE(REPLACE(WM_CONCAT() OVER(PARTITION BY X), Y, ''),
',,',
','),
','),
',') Y,
Z
FROM (SELECT * FROM T ORDER BY X, Z)

xuzhe527843733 2012-09-13
  • 打赏
  • 举报
回复
你不能给大侠 春脚本表数据吗??

槑党--一缕风 2012-09-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
SQL code

create table t(X int, Y int, Z varchar2(10));
insert into t values(1, 11, 'a');
insert into t values(1, 12, 'b');
insert into t values(1, 13, 'c');
insert into t values(1, 1211, 'g')……
[/Quote]
楼上的四楼就蛮好。应该能解决你的问题

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧