【发布时间】:2021-04-26 05:59:43
【问题描述】:
我在使用以下 SQL 查询时遇到了一些困难:
SELECT
SUM(ArTrnDetail.NetSalesValue) AS [Price],
'ExecuteSubReport(813, 0, Job)' AS [LaborCost],
'ExecuteSubReport(815, 0, Job)' AS [MaterialCost],
'ExecuteSymbolicMath(LaborCost + MaterialCost)' AS [TotalCost],
'ExecuteSymbolicMath(Price - (LaborCost + MaterialCost))' AS [Margin],
CASE
WHEN SUM(ArTrnDetail.NetSalesValue) = 0
THEN 0
ELSE 'ExecuteSymbolicMath(1 - (TotalCost / Price))' <-- Where it's failing
END AS [MarginPct]
ExecuteSubReport 和 ExecuteSymbolicMath 是公司职能。 ExecuteSymbolicMath 基本上去除不需要的字符,如 $ 和逗号,进行数学运算并将结果作为字符串返回。该列的最终结果是 0-1 之间的小数(2 位)。当我尝试运行查询时,我收到一条错误消息,指出它无法将 varchar 转换为数字。我已经尝试了几乎所有我能想到的。我试过替换、转换、转换、str。
非常感谢您的帮助!
【问题讨论】:
-
提示:
CASE表达式的类型是什么?如果是数字,'ExecuteSymbolicMath(1-(TotalCost/Price))'将如何被视为数字值? -
@PanagiotisKanavos - 你是个天才!我会发布答案。
-
您传入的是字符串,而不是函数。我相信您想删除您希望 SQL 解析为表达式的表达式周围的 ' 和 '
标签: sql sql-server