oracle多行合并成一行,并且行内不同值组成新列。显示在同一行

思魔 2017-03-22 11:29:33
如图 假如表中存在前四行数据,将要合并成两行数据,并且将相同字段的不同值 组成新的列来显示数据(如图,后5列的值不同)该如何实现。
...全文
2010 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
思魔 2017-03-23
  • 打赏
  • 举报
回复
引用 8 楼 u012557814 的回复:

-- 你这太长了,写了个简单的例子
WITH a AS
(SELECT 1 c1, 'a' c2, 1 c3 FROM dual
UNION ALL
SELECT 1 c1, 'b' c2, 2 c3 FROM dual
UNION ALL
SELECT 2 c1, 'c' c2, 1 c3 FROM dual
UNION ALL
SELECT 2 c1, 'd' c2, 3 c3 FROM dual)
SELECT 
c1,
max(CASE WHEN rnum = 1 THEN c2 END ) c2_1,
max(CASE WHEN rnum = 2 THEN c2 END ) c2_2,
max(CASE WHEN rnum = 1 THEN c3 END ) c3_1,
max(CASE WHEN rnum = 2 THEN c3 END ) c3_2  FROM 
(
SELECT a.*, row_number() OVER(PARTITION BY c1 ORDER BY c2) rnum FROM a
) a1
GROUP BY c1;

        C1 C2_1 C2_2       C3_1       C3_2
---------- ---- ---- ---------- ----------
         1 a    b             1          2
         2 c    d             1          3
[/code]
你这个 好像不行吧,
卖水果的net 2017-03-22
  • 打赏
  • 举报
回复
预期结果 是什么样的?
落落叶叶无声 2017-03-22
  • 打赏
  • 举报
回复

-- 你这太长了,写了个简单的例子
WITH a AS
(SELECT 1 c1, 'a' c2, 1 c3 FROM dual
UNION ALL
SELECT 1 c1, 'b' c2, 2 c3 FROM dual
UNION ALL
SELECT 2 c1, 'c' c2, 1 c3 FROM dual
UNION ALL
SELECT 2 c1, 'd' c2, 3 c3 FROM dual)
SELECT 
c1,
max(CASE WHEN rnum = 1 THEN c2 END ) c2_1,
max(CASE WHEN rnum = 2 THEN c2 END ) c2_2,
max(CASE WHEN rnum = 1 THEN c3 END ) c3_1,
max(CASE WHEN rnum = 2 THEN c3 END ) c3_2  FROM 
(
SELECT a.*, row_number() OVER(PARTITION BY c1 ORDER BY c2) rnum FROM a
) a1
GROUP BY c1;

        C1 C2_1 C2_2       C3_1       C3_2
---------- ---- ---- ---------- ----------
         1 a    b             1          2
         2 c    d             1          3
[/code]
  • 打赏
  • 举报
回复

SELECT R1. station_id,R1.device_id ,R1.box_type_name ,R1.box_id,R1.tick_num1,R2.tick_num1......
(SELECT * FROM (
SELECT T1.*,ROW_NUMBER()OVER(PATITION BY station_id , device_id , box_type_name ,box_id )  RN FROM T1) WHERE RN=1) R1 JOIN 
SELECT * FROM (
SELECT T1.*,ROW_NUMBER()OVER(PATITION BY station_id , device_id , box_type_name ,box_id )  RN FROM T1) WHERE RN=2) R2
ON ......

思魔 2017-03-22
  • 打赏
  • 举报
回复
引用 4 楼 Diza1986 的回复:
[quote=引用 3 楼 w1016373004 的回复:] 以前4列为基准 合并相同的数据行,后面5列 的不同值 分别各增加一列来表示数据,最后的效果是 得到14列的值, 也就是说在同一地点同一台设备上做了两次操作,把这两次操作写在一行里。
前4列相同的一定两条吗,只有一条呢,有N条呢 这两条的后5列,弄成: 列1(1) 列1(2) 。。。 列5(1) 列5(2),哪条在前没有顺序要求[/quote] 目前假设前4列值存在两条重复数据,后面的列按照 卸下和安装 的类型先后显示, 列1(1) 列1(2) 。。。 列5(1) 列5(2) 列1 安装的数量(1) 列1 卸下的数量(2) 。。。 列5安装的时间(1) 列5卸下的时间(2)
Diza1986 2017-03-22
  • 打赏
  • 举报
回复
引用 3 楼 w1016373004 的回复:
以前4列为基准 合并相同的数据行,后面5列 的不同值 分别各增加一列来表示数据,最后的效果是 得到14列的值, 也就是说在同一地点同一台设备上做了两次操作,把这两次操作写在一行里。
前4列相同的一定两条吗,只有一条呢,有N条呢 这两条的后5列,弄成: 列1(1) 列1(2) 。。。 列5(1) 列5(2),哪条在前没有顺序要求
思魔 2017-03-22
  • 打赏
  • 举报
回复
以前4列为基准 合并相同的数据行,后面5列 的不同值 分别各增加一列来表示数据,最后的效果是 得到14列的值, 也就是说在同一地点同一台设备上做了两次操作,把这两次操作写在一行里。
思魔 2017-03-22
  • 打赏
  • 举报
回复
引用 1 楼 wmxcn2000 的回复:
预期结果 是什么样的?
station_id , device_id , box_type_name ,box_id ,tick_num1 ,ticknum2 ,oper_type_name1,oper_type_name2 ...... 这样,很难理解我的问题吗

17,140

社区成员

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

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