2013-10-16 66 views
0

我的代碼如下:凝聚功能不是從系列中選擇數據值

Insert Into dbo.database (Period, Amount) 
Select coalesce (date_1, date_2, date_3), Amount FROM Source.dbo.[10] 

我是100%的值在3個變量的一個存在:日期1,日期,date_3,所有的字符串(var char 100),但當我調用Period時我仍然空白。

任何幫助?

+0

在source.dbo中是否有date_1和date_2和date_3 [10]? –

+0

是的,有。 – ZJAY

+0

你可以創建一個SQL小提琴演示你的問題? –

回答

1

合併的目的是從列表或NULL返回第一個NOT NULL字段,如果沒有字段是NOT NULL,按照鏈接的全部細節http://msdn.microsoft.com/en-us/library/ms190349.aspx

我猜想,你有空值(」' )在其中一列中而不是NULL值。如果您嘗試查找第一個非空非空列,則可以使用case語句。

select 
case 
when len(rtrim(ltrim(date_1))) > 0 then date_1 
when len(rtrim(ltrim(date_2))) > 0 then date_2 
when len(rtrim(ltrim(date_3))) > 0 then date_3 
else null 
end, 
Amount 
from Source.dbo.[10] 
+0

我認爲您已經確定了問題,但有沒有更簡單的方法來跳過合併功能? – ZJAY

+0

並非如此,coalesce旨在查找第一個非空字段。你必須寫一個函數來返回空值爲NULL,或者在合併中每個字段的情況下返回一個空值,如果字段只有一個空值,我會用鏈接到合併細節來更新我的答案。 – Kacey

+0

謝謝。我從中抽取的數據庫非常大。如果這樣做是更有效的:http://stackoverflow.com/questions/3701812/convert-empty-space-to-null – ZJAY