有条件的CASE WHEN陈述

时间:2014-01-21 10:11:40

标签: sql-server-2008 case

我有一张包含以下结构的表格:

CustID | Number 1  | Number 2 | Number 3  | Number 4
    1  | 072454584 |          | 017726593 | 
    2  |           |0125456852|           | 0125785448

我正在尝试进行选择第一个可用号码的查询,因此如果使用客户ID 2,则只返回2号,如果只有4号记录,则会忽略1,2, 3。我已经尝试过做一个声明的案例,但我似乎无法弄清楚逻辑。

2 个答案:

答案 0 :(得分:1)

如果这些列中包含NULL值,请使用COALESCE

SELECT CUSTID, COALESCE(number1, number2, number3, number4)

答案 1 :(得分:1)

您可以使用COALESCE返回第一个非空值:

SELECT COALESCE([Number 1],[Number 2],[Number 3], [Number 4]) AS FirstNonNullNum
FROM dbo.Table1
WHERE CustID = @paramID

Demo

但是,您的模型似乎是半最优的。如果您有列Number 1 - Number N,则可以更好地对其进行规范化,并使用单独的表而不是列。这使得所有查询都更简单,效率更高。如果您计划添加更多列,它也更易于维护且不易出错。