2014-06-30 47 views
-6

我有一個查詢問題。我有一組類似下面的表中的數據的工作:如果爲空,填充相鄰列行

╔══════╦═══════════╗ 
║ Col1 ║ Col2 ║ 
╠══════╬═══════════╣ 
║ 1 ║ NULL  ║ 
║ 2 ║ NULL  ║ 
║ 3 ║ NULL  ║ 
║ 4 ║ AAAAAAAAA ║ 
║ 5 ║ NULL  ║ 
╚══════╩═══════════╝ 

我需要找到一種方式與非NULL值Col2來填充Col2所有NULL值。因此,查詢的結果應該填充所有5行,只要至少有一個非NULL值,即AAAAAAAAA

編輯:它不一定是AAAAAAAAA真正填充其餘的行。它可以是任何東西,只要有一些方法可以確定集合中至少有一個非空值。

+2

如果兩行對'col2'具有不同的非NULL值,那麼該期望什麼?例如,如果'col2'在第一行是'BBBBBBB',你會期望什麼? –

+0

您的意思是「使用非NULL'col1'值填充'col2'中的所有NULL值。」 ? –

+0

@StefanWinkler只要至少有一個非空值,那麼需要有一些標識符表示該集合中存在非空值。所以如果有BBBBBBBB和AAAAAA,那麼它仍然會通過測試。它的值改變並不重要 - 如果通過測試,例如「xyz」,將所有變爲獨特的值可能會更好。那也可以。 – user2989981

回答

0

如果我理解正確的話,你需要:

  1. 獲取col2從表中一個不爲空值,
  2. 坐落在col2所有空值在上一步obtanied值

如果是這樣的話,那麼我認爲這可能幫助你:

-- I am assuming that there's only one not-null value in col2 
set @value = (select col2 from yourTable where col2 is not null limit 1); 
update yourTable 
    set col2 = @value 
    where col2 is null; 
0

下應在MySQL或SQL Server的工作:

update table t 
    set col2 = (select x from (select max(col2) as x from table t where col2 is not null) t) 
    where col2 is null; 
+0

我喜歡在子查詢中的最大想法..但我不需要用SET永久更新表。我正在按照案例陳述的思路思考。 – user2989981

0

不知道我理解你的需要,但...

UPDATE t SET col2 = (SELECT col2 FROM t where col2 is not null LIMIT 1) WHERE col2 is null 
0
select table1.col1, COALESCE(table1.col2, 'xyz') 
    from table as table1 
+0

合併只會將非空值更改爲'xyz',對於所有的人,無論如何。如果其中有一個非空,我只想要更改這些值。許多實例只包含NULLS,與上面的示例中有4個空值和一個'AAAAAAAAA'值相對。 – user2989981

+0

如果你只是在問題中寫下你想要的東西,那將會容易得多。而你對我沒有意義。 – Paparazzi

0

如果你想有一個case語句也不要需要永久性地改變表格(大概你只是希望它的輸出發生改變),就這樣做:

SELECT 
    col1, 
    col2 = case 
     WHEN exists(select col2 from table where col2 is not null) then 'dummyVal' 
     else col2 end 
FROM table 

如果您需要虛擬值作爲表中的某個實際值,那麼爲什麼不使用max或min函數,它們都忽略空值。

​​