2014-01-21 94 views
0

我有以下结构的表:有条件的情况下WHEN语句

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

我尝试这样做,选择第一个数字,可查询,因此,如果使用客户ID 2只会返回2号,如果有一个只有4号的记录,它会忽略1,2,3。我在声明中试过做过一个案例,但我似乎无法理解逻辑。

+1

我认为你应该更好地规划你的表的结构 –

+0

@Nadeem_MK我认为你应该正确地阅读这个问题。 “查询选择可用的第一个数字,所以如果使用客户ID 2,它将只返回数字2,如果有一个只有数字4的记录,它将忽略1,2,3” – GPH

+0

@Gavlaaa - 改变结构是应该始终在SQL问题上考虑的一件事,你应该提到你不能改变它。绝对不要滥用某人试图帮助 - 这并不会让别人感觉到帮助 – Mark

回答

1

如果你有这些列中的NULL值,则使用COALESCE

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

没有任何空值,但易于工作。感谢你的回答。 – GPH

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你应该更好地规范化它,并使用一个单独的表格而不是列。这使得所有查询更简单,效率更高。如果您计划添加更多列,它也更易于维护且不易出错。