使用Cast&amp ;;从数字字段返回字符合并

时间:2014-06-02 09:20:33

标签: sql sql-server-2008-r2

使用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

感谢您的帮助!

1 个答案:

答案 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或等效值替换为“---”。这样您就可以将总收入保留为数据库级别的数字字段。