2014-07-22 65 views
3

我有一個表是這樣的:如何根據公共值合併數據庫行?

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允許合併後兩行。

回答

1

希望這有助於..

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 
+0

良好的工作Sheru –

+0

感謝潘迪,但我想知道的一般情況。你的解決方案假定我用作例子的精確數據,例如:在union選擇之後,你根據我的例子命令isnull參數,並且在不使用isnull的情況下編寫lc2.col5,因爲你知道col5對於最後2行。我正在尋找的是一個通用查詢,用於在一個(或多個)列具有相同數據值時合併信息。 – HiveUser