一个表中两条数据,将其合并成一条

一剑天琊雪 2014-10-12 03:41:42
一个表中有两条数据 A和B ,其中 A 、B 其中一个属性 c 相同 ,并且A.id >B.id
现在我想 将 B合并到A 中 ,
即,以 A 为主, A空的 B填入 。

请问SQL语句 大概应该怎么写?

我的想法是 先 select 出来 然后直接 全部 insert 到 A 中 ,,,但是 select 貌似 distinct 搞不定啊。。。
...全文
252 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
一剑天琊雪 2014-10-13
  • 打赏
  • 举报
回复
欧了,我错了,,,,,, 但是 学了一招 NVL 给力,,, 仍然感谢!
bw555 2014-10-13
  • 打赏
  • 举报
回复
这是oracle区,sqlsevel只能使用case when实现了
一剑天琊雪 2014-10-13
  • 打赏
  • 举报
回复
引用 10 楼 bw555 的回复:
假设你的表为T 这个表自关联,分别起别名为A和B 你把语句中的T改为你的表名,去试下
我用的是SQLserver 2008 NVL 好像无效啊
  • 打赏
  • 举报
回复

with table_name(id,col1,col2,c)as(
select 1,null,'S1','C1' from dual
union all
select 2,'N2',null,'C1' from dual
union all
select 3,'N3','S3','C2' from dual
)
SELECT id, col1, col2, c
  FROM (SELECT id,
               MAX(t.col1) over(PARTITION BY t.c) col1,  --此处只写了c字段相同分组 楼主多个自行修改
               MAX(t.col2) over(PARTITION BY t.c) col2,
               row_number() over(PARTITION BY t.c ORDER BY t.id DESC) rn,
               t.c
          FROM table_name t)
 WHERE rn = 1;

--结果:
        ID COL1 COL2 C
---------- ---- ---- --
         2 N2   S1   C1
         3 N3   S3   C2

bw555 2014-10-13
  • 打赏
  • 举报
回复
假设你的表为T 这个表自关联,分别起别名为A和B 你把语句中的T改为你的表名,去试下
  • 打赏
  • 举报
回复
楼主这是去重的意思么?
一剑天琊雪 2014-10-13
  • 打赏
  • 举报
回复
引用 7 楼 bw555 的回复:
有点明白啥意思了,看看是这意思不?
select 
NVL(A.C1,B.C1) C1,
NVL(A.C2,B.C2) C2,
NVL(A.C3,B.C3) C3,
NVL(A.C4,B.C4) C4
……
FROM T A,T B
WHERE A.id >B.id
还是差一点,,, A B 是 同一个表里的两条数据
bw555 2014-10-13
  • 打赏
  • 举报
回复
有点明白啥意思了,看看是这意思不?
select 
NVL(A.C1,B.C1) C1,
NVL(A.C2,B.C2) C2,
NVL(A.C3,B.C3) C3,
NVL(A.C4,B.C4) C4
……
FROM T A,T B
WHERE A.id >B.id
一剑天琊雪 2014-10-13
  • 打赏
  • 举报
回复
引用 4 楼 bw555 的回复:
[quote=引用 2 楼 sjcss 的回复:] 你这个要用case when或decode 加group就搞定了吧~
楼上的你看懂他什么意思了?[/quote] 就是把 一个表中 两条 相同的信息(准确的说是这两条 有几列相同) 以其中以条为主合并成一条
a825395336 2014-10-13
  • 打赏
  • 举报
回复
引用 4 楼 bw555 的回复:
[quote=引用 2 楼 sjcss 的回复:] 你这个要用case when或decode 加group就搞定了吧~
楼上的你看懂他什么意思了?[/quote] 合并表吧,表的结构你难道不用先创建插入的列然后再插入?主表都没地方了你还想往哪插?更改主表属性然后再update就好,我感觉怎么还是重建比较好,或者视图也不行?
bw555 2014-10-13
  • 打赏
  • 举报
回复
引用 2 楼 sjcss 的回复:
你这个要用case when或decode 加group就搞定了吧~
楼上的你看懂他什么意思了?
一剑天琊雪 2014-10-13
  • 打赏
  • 举报
回复
引用 2 楼 sjcss 的回复:
你这个要用case when或decode 加group就搞定了吧~
,,,,70多个字段。。。。这,,,,我要写70多个CASE when,,, 有什么更好的 方案么?
美到心痛 2014-10-12
  • 打赏
  • 举报
回复
你这个要用case when或decode 加group就搞定了吧~
bw555 2014-10-12
  • 打赏
  • 举报
回复
没看懂啥意思

17,086

社区成员

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

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