表TABLE1:   编号  数量1     数量2   金额
            1     2         1     1.5
            2     3         5     1.5
            3    NULL       2     2.5
            4    NULL      NULL   3.5
要求结果是: 编号(TABLE1.编号)     总计((数量1-数量2)*金额)
              1                            1.5
            2                             -3
            3                             -5   
            4                             NULL但是我求出来第三行是  NULL 是不是因为 数量1是NULL 所以式子就没办法运算

解决方案 »

  1.   

    NULL与任何值计算,比较都是NULL
      

  2.   

    select t.* , 总计 = (isnull(数量1 , 0) - isnull(数量2,0)) * 金额 from tb
      

  3.   

    NULL与任何值计算,比较都是NULL
    你可以设置null默认为0
      

  4.   

    select 编号,(isnull(数量1,0)-isnull(数量2,0))*isnull(金额,0) as 总计 from table1
      

  5.   

    create table tb(编号 int, 数量1 int,   数量2 int, 金额 decimal(18,1))
    insert into tb values(1 ,   2    ,    1   , 1.5 )
    insert into tb values(2 ,   3    ,    5   , 1.5 )
    insert into tb values(3 ,   NULL ,    2   , 2.5 )
    insert into tb values(4 ,   NULL ,    NULL, 3.5 )
    goselect * , 总计 = (isnull(数量1 , 0) - isnull(数量2,0)) * 金额 from tb
    drop table tb/*
    编号          数量1         数量2         金额                   总计                              
    ----------- ----------- ----------- -------------------- ------------------------------- 
    1           2           1           1.5                  1.5
    2           3           5           1.5                  -3.0
    3           NULL        2           2.5                  -5.0
    4           NULL        NULL        3.5                  .0(所影响的行数为 4 行)
    */
      

  6.   

    用ISNULL第四行就是0了,就不是NULL了
      

  7.   

    create table tb(编号 int, 数量1 int,   数量2 int, 金额 decimal(18,1))
    insert into tb values(1 ,   2    ,    1   , 1.5 )
    insert into tb values(2 ,   3    ,    5   , 1.5 )
    insert into tb values(3 ,   NULL ,    2   , 2.5 )
    insert into tb values(4 ,   NULL ,    NULL, 3.5 )
    goselect * , 总计 = 
               (case when 数量1 is null and 数量2 is null then null else
                    (isnull(数量1 , 0) - isnull(数量2,0)) * 金额 end)
    from tb
    drop table tb/*
    编号          数量1         数量2         金额                   总计                              
    ----------- ----------- ----------- -------------------- ------------------------------- 
    1           2           1           1.5                  1.5
    2           3           5           1.5                  -3.0
    3           NULL        2           2.5                  -5.0
    4           NULL        NULL        3.5                  NULL(所影响的行数为 4 行)
    */
      

  8.   

    用isnull替换成0进行计算就可以了