by多个字段 - mysql with rollup用法




MySQL SELECT AS将两列合二为一 (3)

使用此解决方案 ,我尝试使用COALESCE作为MySQL查询的一部分,使用SELECT As输出到csv文件,以便在导出数据时命名列名。

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , ContactPhoneAreaCode1
     , ContactPhoneNumber1
     , COALESCE(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

我想要3列:First_Name,Last_Name和Contact_Phone

我得到5列:First_Name,Last_Name,ContactPhoneAreaCode1,ContactPhoneNumber1和Contact_Phone

如何从查询中隐藏ContactPhoneAreaCode1,ContactPhoneNumber1合并到Contact_Phone的单个列?


NULL列的情况下,最好使用这样的IF子句,它结合了两个函数: CONCATCOALESCE并在结果中的列之间使用特殊字符,如空格或'_'

SELECT FirstName , LastName , 
IF(FirstName IS NULL AND LastName IS NULL, NULL,' _ ',CONCAT(COALESCE(FirstName ,''), COALESCE(LastName ,''))) 
AS Contact_Phone FROM   TABLE1

如果两个列都可以包含NULL ,但您仍希望将它们合并为单个字符串,则最简单的解决方案是使用CONCAT_WS()

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT_WS('', ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

这样您就不必分别检查每列的NULL

或者,如果两列实际上都定义为NOT NULL ,那么CONCAT()就足够了:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1

至于COALESCE ,它是一个有点不同的野兽:给定参数列表,它返回第一个不是NULL


您无需单独选择列以在CONCAT中使用它们。 只需删除它们,您的查询将变为:

SELECT FirstName AS First_Name
     , LastName AS Last_Name
     , CONCAT(ContactPhoneAreaCode1, ContactPhoneNumber1) AS Contact_Phone 
  FROM TABLE1






sql