我写了一个SQL 显示内容 goodsname 为显示1 
ID  goodsname 
1   汽车
2   飞机
3   火车但是在修改哈偶就变成了显示2
ID  goodsname 
1   
2   飞机(7189)
3   为什么会显示成这样子呢,我想把其他内容也显示出来啊,如下显示显示3
ID  goodsname 
1   汽车
2   飞机(7189)
3   火车
我写的SQL 如下SELECT c.HandCard_ID,
       cd.is_send,
       case cd.room_id
         when '0' then
          goods.goodsname+acoklog.cookid   -- 如果加上'+acoklog.cookid' 就显示“显示2” 中内容了
         when '' then
          goods.goodsname+acoklog.cookid   -- 如果加上'+acoklog.cookid' 就显示“显示2” 中内容了
         else
          '(' + cd.room_id + ')' + Goods.GoodsName
       end GoodsName,
       cd.Num,
       cd.newprice,
       case is_send
         when 1 then
          0
         else
          cd.NewPrice * cd.Num
       end as totalmoney,
       case cd.Hand_BillNo
         when '-1' then
          null
         else
          cd.Hand_BillNo
       end as hand_billno,
       op.ename operator,
       cd.StartTime,
       em.empname server,
       eo.empname handbiller,
       ds.deptname deptname
  FROM tb_consume_detail cd
  LEFT OUTER JOIN Goods ON cd.Goods_ID = Goods.GoodsID
  LEFT OUTER JOIN GoodsCate ON GoodsCate.GoodsCateID = Goods.GoodsCateID
  left join t_operator op on cd.hand_biller = op.id
  LEFT OUTER JOIN TB_Consume c ON cd.Consume_ID = c.ID
  LEFT OUTER JOIN employees em on cd.server_id = em.empid
  left outer join employees eo on cd.hand_biller = eo.empid
  left outer join depts ds on ds.deptid = eo.deptid
  left outer join cooklog acoklog on acoklog.goodsid = cd.goods_id  and acoklog.hand_billno = cd.hand_billno
 where Goods.GoodsCateID in (52)
   and cd.hand_billno = '1X0306T101532403'
 order by c.handcard_id   

解决方案 »

  1.   

    加个isNull(param,'') 函数就可以,Str+null,或者null+Str都会显示null。
      

  2.   


    SELECT c.HandCard_ID,
      cd.is_send,
      case cd.room_id
      when '0' then
      isNull(goods.goodsname,'')+isNull(acoklog.cookid,'') 
      when '' then
      isNull(goods.goodsname,'')+isNull(acoklog.cookid,'')
      else
      '(' + cd.room_id + ')' + Goods.GoodsName
      end GoodsName,
      cd.Num,
      cd.newprice,
      case is_send
      when 1 then
      0
      else
      cd.NewPrice * cd.Num
      end as totalmoney,
      case cd.Hand_BillNo
      when '-1' then
      null
      else
      cd.Hand_BillNo
      end as hand_billno,
      op.ename operator,
      cd.StartTime,
      em.empname server,
      eo.empname handbiller,
      ds.deptname deptname
      FROM tb_consume_detail cd
      LEFT OUTER JOIN Goods ON cd.Goods_ID = Goods.GoodsID
      LEFT OUTER JOIN GoodsCate ON GoodsCate.GoodsCateID = Goods.GoodsCateID
      left join t_operator op on cd.hand_biller = op.id
      LEFT OUTER JOIN TB_Consume c ON cd.Consume_ID = c.ID
      LEFT OUTER JOIN employees em on cd.server_id = em.empid
      left outer join employees eo on cd.hand_biller = eo.empid
      left outer join depts ds on ds.deptid = eo.deptid
      left outer join cooklog acoklog on acoklog.goodsid = cd.goods_id and acoklog.hand_billno = cd.hand_billno
     where Goods.GoodsCateID in (52)
      and cd.hand_billno = '1X0306T101532403'
     order by c.handcard_id
      

  3.   

    你的case when 判断的有问题
      

  4.   

    null 加减乘除任何值都为 null
      

  5.   

    acoklog.cookid是什么数据类型,数值型的么?
    isnull(ltrim(acoklog.cookid),'')  试试!
      

  6.   

    楼主要注意在设置列表达式的时候注意NULL的特殊性。