使用SQL Server 2008 R2
相对基本的SQL用户,如果这是一个简单的问题,但需要一些帮助来整理我给出的相当复杂的脚本的输出,这表示道歉。
我有许多列被返回,其中有一个NULL,我想用一组标准字符替换所有NULL,目前" ---"。使用ISNULL
适用于大多数列。但是,对于某些列,我们正在查看2个表来查找值,因此在对此进行了一些研究之后,我修改了一条我遇到问题的行,如下所示:
上
isnull (ff.ff_sales,aa.ff_sales) as 'Total Revenue'
最新
cast(coalesce(ff.ff_sales,aa.ff_sales,'') as FLOAT) as 'Total Revenue'
初始行返回' NULL'如果两者都是ff.ff_sales& aa.ff_sales是空的,现在使用cast&合并我得到' 0'。但是,我正在努力实现一个我得到的情况 - '对于存在NULL的所有其他字段。我不希望它返回' 0' 0对于Sales字段,因为这会产生误导。我尝试使用VARCHAR
代替FLOAT
,但我不确定在这个阶段这是否正确?
第一列使用ISNULL
,第二列电流输出为cast& coalesce,第3列是我想要的:
Total Revenue Total Revenue Total Revenue
67755 67755 67755
6.123 6.123 6.123
494.75 494.75 494.75
0 0 0
1139909 1139909 1139909
12346.45 12346.45 12346.45
129.866 129.866 129.866
NULL 0 ---
NULL 0 ---
554 554 554
感谢您的帮助!
答案 0 :(得分:0)
您可以使用大小写来决定在这种情况下应该输出什么,如下所示:
select
case
when isnull (ff.ff_sales,aa.ff_sales) is null then '---'
else cast(isnull (ff.ff_sales,aa.ff_sales) as varchar)
end as 'Total Revenue'
这会强制输出返回varchar
,因为你不能将'---'转换为数字类型。
或者,您可以在DB中将值设为NULL,并在表示层中将DBNull
或等效值替换为“---”。这样您就可以将总收入保留为数据库级别的数字字段。