2016-06-14 133 views
-1

我有表是這樣的:SQL服務器:通過組替換NULL

| id | column_a | column_b | 
| 1 | NULL | 111  | 
| 1 | 222  | NULL  | 
| 2 | NULL | 333  | 
| 2 | 444  | NULL  | 

我想組像這樣

| id | column_a | column_b | 
| 1 | 222  | 111  | 
| 2 | 444  | 333  | 

Column_a和column_b爲varchar。和pattern的NULL值是一致的。 我該怎麼做?

+1

如果還有一行'1,100,200',會發生什麼? – sagi

+0

警告:上面的例子不是真正的問題,q.v.我在下面刪除了答案。 –

回答

0

聚合函數SUM不像普通函數和運算符那樣處理NULL。一旦遇到NULL操作數,它就不會一回到NULL,而只會在計算結果時考慮非NULL字段。

所以,你可以解決它這樣..

select id, sum(column_a) as column_a, 
sum(column_b) as column_b 
from tbl1 
group by id; 

Demo Here

0

嘗試這一個,以及...

select id, sum(nvl(column_a,0)) as column_a, 
sum(nvl(column_b,0)) as column_b 
from tbl1 
group by id; 
0

我覺得你的問題是不添加應用程序數值。

也許你的意思是這樣..

select ISNULL(ta.id,tb.id) id, ta.a,tb.b 
from 
(select * from t where a is not null) ta 
full join 
(select * from t where b is not null) tb 
on ta.id = tb.id 

爲@sagi說,什麼樣的價值觀會收到此表,你應該更好地解釋這個問題

的性質是什麼?每個ID只有兩個記錄?一列第一列爲空,第二列不爲空,反之亦然?

還是還有其他場景?