我要求用DEL填写所有NULL字段。我不想修改数据库表,我只想在列上做。以下是我现在正在尝试做的事情。基本上如果值不为null,那么我想要132.00。如果它为null,那么我想看DEL。我正在研究SQL 2008 R2。感谢您的帮助,非常感谢。
当前的想法
CASE WHEN [Sales] IS NOT NULL
THEN CAST([Sales] AS decimal(10,0))
ELSE 'DEL'
END AS Sales
错误
将数据类型varchar转换为数字时出错。
Warning: Null value is eliminated by an aggregate or other SET operation.
答案 0 :(得分:1)
CASE WHEN [Sales] IS NOT NULL
THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000))
ELSE CAST(DEL AS NVARCHAR(1000))
END AS Sales
在一个case语句中,返回的数据类型必须相同。
修改强>
如果sales为null,则返回字符串DEL
CASE WHEN [Sales] IS NOT NULL
THEN CAST(CAST([Sales] AS decimal(10,0)) AS NVARCHAR(1000))
ELSE 'DEL'
END AS Sales
答案 1 :(得分:1)
您不能存储在定义为包含小数的列中的“DEL”文本。这是不可能的。更重要的是,不应将列中的十进制值存储为保存字符串。换句话说,这个要求是倒退的。
您可以做的是继续存储之前的NULL和十进制数据,只返回显示的字符串数据:
CASE WHEN [sales] IS NULL THEN 'DEL' ELSE Convert(varchar(13), [sales]) END
然而,这也不是理想的,因为它会强制您的数据库执行转换工作,并且意味着您的客户端代码开始使用字符串而不是数字。这里最好的选择是让数据库继续按原样处理原始数据,并进行调整以在客户端代码中将NULL更改为“DEL”。