大大们:
    我写了一个sql语句,两种情况执行出来结果一样
   select [name],
max(isnull((case subject when '数学' then score end),0)) [数学],
max(isnull((case subject when '语文' then score end),0)) [语文],
max(isnull((case subject when '英语' then score end),0)) [英语],
isnull(max(case subject when 'asp.net' then score end),0) [asp.net],
isnull(max(case subject when 'sqlserver' then score end),0) [sqlserver]
from idl
group by [name]一种是先判断是否为null,在聚合
另一种是先聚合在判断。
请问哪种更规范????谢谢

解决方案 »

  1.   

    如果你想把null当做0的话 第一种好
      

  2.   


    isnull(max(case subject when 'asp.net' then score end),0)
    不建議這樣寫,最好先把null處理一下,要不然null和其他字符操作后仍是null
    你這裡是max函數看不出效果,要是用sum函數的話, null+值=null  結果就不對了。
      

  3.   

    --直接这样即可.你那两种不太好.
    select [name],
        max(case subject when '数学' then score else 0 end) [数学],
        max(case subject when '语文' then score else 0 end) [语文]
    from idl
    group by [name]