【发布时间】:2018-05-15 16:17:40
【问题描述】:
需要帮助来清除错误: 消息 8114,第 16 级,状态 5,第 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],
还有错误:
消息 8134,第 16 级,状态 1,第 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 %],
请指教。谢谢
【问题讨论】:
-
尝试将
(Paid.Paid IS NULL OR Paid.Paid = 0) OR (sopHdr.DOCAMNT = 0 OR sopHdr.DOCAMNT IS NULL)更改为((Paid.Paid IS NULL) OR (Paid.Paid = 0)) OR ((sopHdr.DOCAMNT = 0) OR (sopHdr.DOCAMNT IS NULL))。我可能有优先权问题。另外,您使用的是哪个 DBMS,Oracle? -
谢谢。我正在使用 SQL
-
我收到的信息仍然相同,但我认为每个案例都需要转换。
-
看起来这个特殊情况是问题所在: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 [应计佣金],