2013-08-21 39 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