2013-08-21 61 views
0
Address1, 
Address2, 
TownCity, 
Region, 
Postcode, 
Country, 

嗨,大家好和三角旗號,SQL列合併

我有一個SQL問題。如果你能幫助我與它那簡直是真棒。

在上面的表格(softc中)有幾列的那個ID喜歡合併成所謂的「contactinfo」

列一列,需要加以合併:

Address1, 
Address2, 
TownCity, 
Region, 
Postcode, 
Country, 

我試着UNION,但它過濾出NULL值的行。我有618個記錄。當我做一個UNION時它會出現750.(某些記錄可能包含全部NULL。但它們有必要將單個映射到另一個表中)

感謝您的幫助,感謝


我與MySQL

+1

您使用哪種RDBMS? SQL Server? MySQL的?甲骨文? DB2?請讓你的標籤更具體。 – Bridge

+0

對不起,我應該提到it.i'm與mySQL.thanks – Carter

回答

0
select IFNull(Address1,'') + IFNull(Address2,'') + IFNull(TownCity,'') + IFNull(Region,'') + IFNull(Postcode,'') + IFNull(Country,'') as ContactInfo from Softc 

這應該是你想要的...

+1

這將返回null,如果任何字段值爲null。 null +'abc'= null。嘗試IsNull()函數 – Miller

+0

您好馬丁感謝您的答覆,但查詢返回所有NULL,我是一個SQL新手,你可以告訴,我如何包括IsNull()到query.and感謝米勒你的輸入以及 – Carter

+0

我正在使用mySQL.thanks – Carter

0

工作試試這個

select ISNULL(Address1,'') + ISNULL(' '+Address2,'') + ISNULL(', '+TownCity,'') 
+ ISNULL(', '+Region,'') + ISNULL(', '+Postcode,'') + ISNULL(', '+Country,'') as ContactInfo from Softc 
+0

嗨米勒謝謝你的答覆。我嘗試過IFNULL而不是ISNULL,因爲我正在與mySQl ...但它沒有workout.i了一堆數字,而不是合併的列。 – Carter

0

您可以將合併/與合併單元格Concat命令

例如:

CONCAT([Firstname],',',[lastname]) as Fullname.

表達式=的concat [字段名/分隔符],[字段名/分隔符],...............等

+0

感謝馬塞爾,我試過了,但它似乎只返回所有填充字段的記錄。如果有一個空值,它不會返回它。 ************************************************* ***** 請選擇CONCAT((地址1),地址2,城市城市,郵政編碼,國家)爲softc ************************ ***************************** – Carter

+0

通過添加,ISNULL(field,'defaultValue')您可以繞過空值。可能是string.Format幫助http://stringformat-in-sql.blogspot.nl/ – marcel

+0

感謝marcel,使用過, SELECT AppContactID AS id,CompanyName AS title,LTRIM(CONCAT(Address1,',',Address2, ',','TownCity',',',郵政編碼))AS contactinfo,Phone1 AS聯繫人,Phone2 AS聯繫人2,電子郵件,WWW AS網址 FROM softc 所有好現在NULL報告back.so好times.thanks – Carter

0

數據庫規範化的一部分是打破數據轉換成它的最離散組件。你現在有這個。不要把它堵上。

解決您的問題的好方法是將所有空值更新爲空字符串。然後改變這些列,以便它們不允許空值並且具有空字符串的默認值。這將允許您的concatonation查詢運行得更快,因爲您不必檢查空值。

此外,如果要求返回聯繫人信息字符串頻繁,您可以編寫一個數據庫函數來返回它。

+0

感謝您的輸入Dan,我工作的這個Db不是我的設計,我試圖將它從舊的Access MDB遷移到mySQL數據庫 – Carter