需要帮助才能清除错误: Msg 8114,Level 16,State 5,Line 2 将数据类型varchar转换为数字时出错。
CASE WHEN (proj.UserText1 IS NULL OR proj.UserText1 = '')
THEN 0.00
ELSE
CASE
WHEN sopHdr.SOPTYPE = 4
THEN (((sopHdr.DOCAMNT - inv.TaxTotal) - inv.CostTotal) * - 1) * (proj.UserText1 / 100.0)
ELSE ((sopHdr.DOCAMNT - inv.TaxTotal) - inv.CostTotal) * (proj.UserText1 / 100.0)
END
END AS [Accrued Commission],
CASE WHEN (sopHdr.DOCAMNT < 0) OR (sopHdr.SOPTYPE = 4 AND sopHdr.DOCAMNT > 0) THEN 100.00
ELSE
CASE WHEN (Paid.Paid IS NULL OR Paid.Paid = 0) OR (sopHdr.DOCAMNT = 0 OR sopHdr.DOCAMNT IS NULL) THEN 0.00
ELSE (Paid.Paid / sopHdr.DOCAMNT) * 100
END END AS [Paid %],
CASE WHEN sopHdr.DOCAMNT < 0 THEN (sopHdr.DOCAMNT)
WHEN (sopHdr.SOPTYPE = 4 AND sopHdr.DOCAMNT > 0) THEN (sopHdr.DOCAMNT * - 1)
ELSE CASE WHEN Paid.Paid IS NULL THEN 0.00
ELSE Paid.Paid
END END AS [Amount Received],
CASE WHEN sopHdr.SOPTYPE = 4
THEN (inv.TaxTotal * - 1)
ELSE inv.TaxTotal
END AS [Tax Amount],
CASE WHEN sopHdr.SOPTYPE = 4 THEN CAST(CAST(((sopHdr.SUBTOTAL - inv.TaxTotal - inv.CostTotal) * - 1) AS DECIMAL(13,6)) as float)
ELSE CAST(CAST((sopHdr.SUBTOTAL - inv.TaxTotal - inv.CostTotal)AS DECIMAL(13,6)) as float)
END AS [Gross Profit],
CASE WHEN sopHdr.SOPTYPE = 4 THEN (inv.CostTotal * - 1)
ELSE inv.CostTotal
END AS [Ext Cost],
CASE WHEN (proj.UserText1 IS NULL OR proj.UserText1 = '') THEN CAST('0.00' as varchar)
ELSE CAST(proj.UserText1 as varchar)
END AS [Commission %],
CASE WHEN sopHdr.SOPTYPE = 4 THEN CAST(CAST(((sopHdr.DOCAMNT - inv.TaxTotal) * - 1) AS DECIMAL(13,6)) as float)
ELSE CAST(CAST((sopHdr.DOCAMNT - inv.TaxTotal) AS DECIMAL(13,6)) as float)
END AS [Net Sales],
错误:
Msg 8134,Level 16,State 1,Line 16
除以遇到的零错误。
Case#9
CASE WHEN (sopHdr.SUBTOTAL IS NULL OR sopHdr.SUBTOTAL = 0) THEN 0.00
ELSE
CASE WHEN sopHdr.SOPTYPE = 4 THEN ((sopHdr.SUBTOTAL - inv.TaxTotal - inv.CostTotal) /(sopHdr.SUBTOTAL) - (inv.TaxTotal)) * - 100
ELSE (((sopHdr.SUBTOTAL - inv.TaxTotal - inv.CostTotal) / (sopHdr.SUBTOTAL) - (inv.TaxTotal)) * 100)
END
END AS [Sale Gross Profit %],
请指教。谢谢
答案 0 :(得分:0)
除以常量,只有表格字段或包含表格的表达式时,不会出现Divide by zero
错误。
因为sql是声明性语言,即使你写这样的东西:
select a/b
from table
where b <> 0
你的数据库引擎可能会决定为每条记录更容易计算并稍后过滤掉,这显然会给你这个错误。
假设yoy正在使用sql server,我曾经这样写过:
select a/NULLIF(b, 0)
from table
where b <> 0
NULLIF()
会将零转换为空值而不是错误,您将获得null
,(当然在上面的示例中将没有包含空值的行)