Chr*_*s B 6 sql t-sql sql-server-2005
我有一个简单的SQL查询(SQL Server 2005),我从一个包含多个具有BIT值的列的表中进行选择.这些列可以为空,因此可以包含NULL,0或1.
有相当数量的这些列,在我的查询中,如果值为NULL,我想返回零.我目前正在使用ISNULL:
SELECT Name, Age, ISNULL(LikesOranges,0), ISNULL(LikesApples,0), ISNULL(LikesPears,0)
FROM FoodPreferences
Run Code Online (Sandbox Code Playgroud)
正如我所提到的,有很多这些BIT专栏(远远超过上面的简单示例).有没有办法可以在多列上使用ISNULL,如下所示:
SELECT ISNULL(*,0) FROM FoodPreferences
Run Code Online (Sandbox Code Playgroud)
上面的查询不起作用,但你得到我正在尝试做的事情 - 所以我可以避免为每列写一个ISNULL语句,
谢谢.
试试这个:
SELECT COALESCE(LikesOranges, LikesApples, LikesPears) AS MyBit FROM FoodPreferences
Run Code Online (Sandbox Code Playgroud)
这将返回第一个非null值.如果所有字段都为NULL,则结果为NULL.
更新:
结论是:
SELECT ISNULL(COALESCE(LikesOranges, LikesApples, LikesPears),0) AS MyBit FROM FoodPreferences
Run Code Online (Sandbox Code Playgroud)
所以我可以避免为每列写一个ISNULL语句,
运行此查询并将结果复制到select语句.system_type_id = 104过滤bit列上的结果.
select stuff((select ', isnull('+name+', 0)'
from sys.columns
where object_id = object_id('FoodPreferences') and
system_type_id = 104
for xml path('')), 1, 1, '')
Run Code Online (Sandbox Code Playgroud)
结果:
-------------------------------------------------------------------------
isnull(LikesOranges, 0), isnull(LikesApples, 0), isnull(LikesPears, 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17231 次 |
| 最近记录: |