怎么把ID相同的数据合并成一行了 着急啊,求大神

sx_zyb 2015-12-02 11:02:51


表的格式就是这样的。
ZYH DM

想要的效果是
如果ZYH 号码跟ZYH号码相等则,DM 想后排列。
例如 0000374445 这个号码跟下面的相等 则DM 想后排列

想要的数据是
ZYH DM DM 1
0000374902 50.24001
50.24001 33.231
0000374445 74.3 002 74.1 002
0000376096 41.381 41.2
0000374460 33.231
查询的结果是表格形式的,DM 和DM1是表格的,中间不是逗号分开的。

最后给出SQL代码加上分析 注解 谢谢
...全文
2798 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
csliu_cool887 2015-12-10
  • 打赏
  • 举报
回复
有待改进,能实现动态 SELECT * FROM( SELECT ZYH,DM,ROW_NUMBER()OVER(PARTITION BY ZYH ORDER BY ROWNUM) AS RN FROM TEST_001) A PIVOT( MAX(DM) AS DM FOR RN IN( 1 , 2, 3 ) );
z123zjf 2015-12-04
  • 打赏
  • 举报
回复
不知道确切的列数,无法实现的需求吧。 可能pl/sql能做
jdsnhan 2015-12-04
  • 打赏
  • 举报
回复
Lead(exp_str,offset,defval) over() offset是偏移几行,随意偏移几行都可以。 最大的问题是,难道你确定有多少行重复的?或者说,动态展示的列不知道有多少个?
jdsnhan 2015-12-03
  • 打赏
  • 举报
回复
也可以这样 select id, num, num1 from (select id, num, lead(num, 1, null) over(partition by id order by id) num1 from tlead1) aa where rowid in (select min(rowid) from tlead1 bb where aa.id = bb.id)
sinat_18597213 2015-12-03
  • 打赏
  • 举报
回复
只是用了部分数据 WITH t AS ( SELECT 0000374445 zyh, '74.3 002' DM, '2015/2/2' sj FROM dual UNION SELECT 0000374445 zyh, '74.1 002' DM, '2015/2/2' sj FROM dual UNION SELECT 0000376096 zyh, '41.381' DM, '2015/2/3' sj FROM dual UNION SELECT 0000376096 zyh, '41.21' DM, '2015/2/5' sj FROM dual UNION SELECT 0000374460 zyh,'33.231' DM, '2015/2/5' sj FROM dual ) SELECT tt.zyh, MAX(DECODE(rn,1,dm,NULL)) dm, MAX(DECODE(rn,2,dm,NULL)) dm1 FROM (SELECT t.*, row_number() OVER(PARTITION BY zyh ORDER BY zyh) rn FROM t) tt GROUP BY tt.zyh;
JuanRiquelme 2015-12-03
  • 打赏
  • 举报
回复
WITH T AS (SELECT 0000374445 ZYH, '74.3 002' DM, '2015/2/2' SJ FROM DUAL UNION SELECT 0000374445 ZYH, '74.1 002' DM, '2015/2/2' SJ FROM DUAL UNION SELECT 0000376096 ZYH, '41.381' DM, '2015/2/3' SJ FROM DUAL UNION SELECT 0000376096 ZYH, '41.21' DM, '2015/2/5' SJ FROM DUAL UNION SELECT 0000374460 ZYH, '33.231' DM, '2015/2/5' SJ FROM DUAL) SELECT ZYH, MAX(DM) AS DM, MIN(DM) AS DM1 FROM T GROUP BY ZYH
sx_zyb 2015-12-03
  • 打赏
  • 举报
回复
2楼的,是写死的代码,我的数据量很大的,这种办法不现实的
3楼的,你这个虽然是实现的。但是只能去2中情况的


麻烦3楼在给讲解下哈
这个lead 只能取偏移量的也就是说只能取下一个数的
这么循环取完所以的6个了
lhdz_bj 2015-12-02
  • 打赏
  • 举报
回复
嗯,去搜下行转列的话题吧。

17,086

社区成员

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

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