2013-11-25 35 views
0

我试图将列设置为0.00,如果它是NULL,或者计算的值(如果它不为null)。如果为空或计算值,则将列更新设置为0.00

在下表中,最高得分可能并不总是被设置,并且perCent col有时最终会显示NULL,这在前端显示中看起来很奇怪。

我正在尝试下面的SQL,它不会抛出任何错误,也不工作,这意味着什么是错误的。

我该如何设置这个权利?

"studentId" "maxScore" "studentScore" "stdPerCent" 
"1"   "100"  "25"   "25.00" 
"2"   "0"   "0"    NULL 

的Sql

update scores SET stdPerCent = if(NULL,'0.00',TRUNCATE(100*studentScore/maxScore,2)); 
+0

为什么要存储计算? – Kermit

+0

@FreshPrinceOfSO所以我不必再次计算显示。 – jmenezes

+0

只要你100%确定计算的字段永远不会改变。 – Kermit

回答

2

我发现COALESCE更容易使用(和阅读)比的情况下:

UPDATE scores 
SET stdPerCent = COALESCE(TRUNCATE(100*studentScore/maxScore,2), '0.00') 

编辑:如果你只是在尝试t o填充NULL字段,并且知道非NULL字段已经正确计算,这会更有意义:

UPDATE scores 
SET stdPerCent = '0.00' 
WHERE stdPerCent IS NULL 
+0

你说得对。我不想检查表值是否为空。我会在插入之前检查sql中的计算值是否为空。 – jmenezes

+0

@jmenezes在这种情况下,COALESCE就是你想要的。该函数返回列表中的第一个非NULL值。它也可以用在你的初始更新/插入语句中。 – Sam

相关问题