sql - 如何根据公共(public)值合并数据库行?

标签 sql database merge hiveql

我有一张这样的表:

Col1   Col2   Col3   Col4   Col5
====   ====   ====   ====   ====
 A1     B1     C1    null   null
 A1    null    C1    null    E1
 A1     B2    null    D1     E2
 A1    null    C2    null    E2

我如何合并信息以便最终得到:

Col1   Col2   Col3   Col4   Col5
====   ====   ====   ====   ====
 A1     B1     C1    null    E1
 A1     B2     C2     D1     E2

什么 SQL 会为我做这件事?请注意,两个 C1 允许合并前两行,而两个 E2 允许合并最后两行。

最佳答案

希望这有帮助..

CREATE TABLE #LocalTempTable(
col1 varchar(50) ,
col2 varchar(50) NuLL, 
col3 varchar(50) NuLL,
col4 varchar(50) NuLL, 
col5 varchar(50) NuLL)

insert into #LocalTempTable values ( 'A1', 'B1','C1',NULL,NULL);
insert into #LocalTempTable values ( 'A1', NULL,'C2',NULL,'E1');
insert into #LocalTempTable values ( 'A1', 'B2',NULL,'D1','E2');
insert into #LocalTempTable values ( 'A1', NULL,'C2',NULL,'E2');


select * from #LocalTempTable


 --A1     B1     C1    null    E1
 --A1     B2     C2     D1     E2
 select  *from(
select  ROW_NUMBER() over  ( order by lc1.col1  ) as ID ,
lc1.col1
,lc1.col2
,lc1.col3
,lc1.col4
,lc2.col5
 from #LocalTempTable lc1 inner join #LocalTempTable lc2 on lc2.col1=lc1.col1 ) as c where ID=5
 union 

 select  *from(
select  ROW_NUMBER() over  ( order by lc1.col1  ) as ID ,
lc1.col1
,isnull(lc1.col2,lc2.col2) as col2
,isnull(lc2.col3,lc1.col3) as col3
,isnull(lc1.col4,lc2.col4) as col4
,lc2.col5
 from #LocalTempTable lc1 inner join #LocalTempTable lc2 on lc2.col1=lc1.col1 ) as c where ID=10

关于sql - 如何根据公共(public)值合并数据库行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24879235/

相关文章:

c# - 如何将数据随机绑定(bind)到单选按钮列表 asp.net

mysql - SQL - 使用 COUNT 查询时出现问题

PHP telegram API 读取群聊消息

python - 使用单行代码合并两个具有不同索引的数据帧,同时保留主数据帧的索引

mysql - 使用单个值更新多行

mysql - 使用嵌套表清理 SQL 查询

sql - 在Oracle数据库中查找表的 block 号

c++ - 我可以强制 MySQL 以二进制形式传输数值吗?

python - 合并在 Pandas 中返回空数据框

perl - Perl 5.18+ 中的哈希合并方法受到哈希顺序随机化的影响吗?