老破烂系统中老板总会给出奇奇怪怪的查询条件
加上控件的限制 不得不使用临时表来进行数据更新
于是乎老板在某次给出的条件数据中
有些数据某些条件下分母必定为零!!Orz
不会SQL的人儿只好开始用自己究极无敌烂的SQL语法来在SQL中添加条件:
原始语句与数据(恩..同事说不用拼音缩写他们看不懂- -):
--更新满足率
UPDATE Tmp
SET Tmp.PJ_DD_MZL = CONVERT(FLOAT,TMP.DD_sftCount)/CONVERT(FLOAT,TMP.Amount),Tmp.DD_XS_MZL = CONVERT(FLOAT,DD_MZXS)/CONVERT(FLOAT,HJSQXS)
FROM #tmp_Pjddmzl AS Tmp
最先开始想到的是将0置换为NULL
因为SQL SERVER 中NULL与任何数进行任何运算,其结果都等于NULL
使用NULLIF(expression_1,expression_2)
若expression_1等于expression_2 则返回NULL
否则返回expression_1
UPDATE Tmp
SET Tmp.PJ_DD_MZL = NULLIF(CONVERT(FLOAT,TMP.DD_sftCount),0)/CONVERT(FLOAT,TMP.Amount),Tmp.DD_XS_MZL = NULLIF(CONVERT(FLOAT,DD_MZXS),0)/CONVERT(FLOAT,HJSQXS)
FROM #tmp_Pjddmzl AS Tmp
用了一半发现在这个临时表中不允许NULL的存在…
= =于是本小笨蛋决定CASE:
UPDATE Tmp
SET Tmp.PJ_DD_MZL = (CASE Tmp.DD_sftCount
WHEN 0 THEN 0
ELSE CONVERT(FLOAT, TMP.DD_sftCount) / CONVERT(FLOAT, TMP.Amount) END),
Tmp.DD_XS_MZL = (CASE Tmp.HJSQXS WHEN 0 THEN 0 ELSE CONVERT(FLOAT, DD_MZXS) / CONVERT(FLOAT, HJSQXS) END)
FROM #tmp_Pjddmzl AS Tmp
大功告成(能用就行)