我在SQL Server帽子中有一个表:
FirstName, LastName, MiddleName, CellNumber, HomeNumber
John Smith M 111-111-1111, 222-222-2222
此人可以拥有CellNumber和HomeNumber,也可以拥有CellNumber但不能拥有HomeNumber,或者可以拥有HomeNumber而不能拥有CellNumber。
如果CellNumber为NULL或空白,我如何编写一个总是返回CellNumber(如果存在)和HomeNumber的查询。
用于生成以下结果的SQL查询:
FirstName, LastName, MiddleName, NumberToUse, PhoneType
John Smith M 111-111-1111 CellNumber
感谢您的帮助。
答案 0 :(得分:0)
您使用case
:
select . . .,
(case when cellNumber is not null or cellNumber <> '' then cellNumber else homeNumber en) as NumberToUse,
(case when cellNumber is not null or cellNumber <> '' then 'Cell' else 'Home' end) as PhoneType
from t;
如果空白可以包含空格,您可以使用replace()
或ltrim()
删除空格(用于比较)。
严格来说,与is not null
的比较并非必要。但它使查询的意图更加明显。
答案 1 :(得分:0)
只有一种情况,首先要检查CellNumber是否可用,否则回退到HomeNumber。
SELECT
FirstName,
LastName,
MiddleName,
CASE WHEN
CellNumber IS NOT NULL THEN CellNumber
ELSE
HomeNumber
END AS NumberToUse,
PhoneType
FROM
TableName
答案 2 :(得分:0)
coalesce在这里是你的朋友..它返回列表中的第一个非空值..所以你不必做一整堆case语句
select coalesce(cellnumber,HomeNumber) from yourtable
答案 3 :(得分:0)
另一个选项Coalesce()
与NullIf()
示例强>
Select FirstName
,LastName
,MiddleName
,DefaultPhone = coalesce(NullIf(CellNumber,'')+' Cell',NullIf(HomeNumber,'')+' Home')
from YourTable
答案 4 :(得分:0)
select FirstName, LastName, MiddleName,
case when isnull(CellNumber, '') = '' then HomeNumber else CellNumber end as NumberToUse,
case when isnull(CellNumber, '') = '' then 'HomeNumber' else 'CellNumber' end as PhoneType
from ...