我有一张这样的表(简化):
CREATE TABLE #table (Id INT, Field NVARCHAR(MAX))
INSERT INTO #table VALUES (1, 'SomeText')
INSERT INTO #table VALUES (2, '1234')
出于某些原因,我需要查询此表并获取Field
的总和(如果它是数字),如果不是,则返回''
。我试过这样的话:
SELECT CASE WHEN ISNUMERIC(Field) = 1 THEN SUM(CONVERT(MONEY, Field)) ELSE '' END
FROM #table
GROUP BY Field
但是此查询会导致以下异常:
无法将char值转换为money。 char值的语法不正确。
我甚至将ELSE
案例从''
更改为0
,但我仍然收到相同的消息。
为什么我会得到例外?据我所知,SUM(...)
返回0时不应执行ISNUMERIC(Field)
。
答案 0 :(得分:3)
Select sum(case when ISNUMERIC(Field)=1 then cast(field as money) else 0 end)
from #table
Group By Field
返回
(No column name)
1234.00
0.00
答案 1 :(得分:0)
使用混合数据类型可能会非常痛苦。尽可能考虑避免这种情况的表格设计。更复杂的是,IsNumeric并不总是返回what you might expect。
在聚合之前过滤掉非数字是一种方法:
SELECT
SUM(CONVERT(MONEY, Field))
FROM
#table
WHERE
ISNUMERIC(Field) = 1
GROUP BY
Field
;