这样的排序,一般是通过ORDER BY CASE WHEN 这样的语句实现
具体,要看你具体的数据,你文字描述,只能这样回答你。

解决方案 »

  1.   


    select solded / case 
      when stock <=0 then 24*(quehuoTime-buhuoTime+onlineTime) 
      when stock > 0 then 24*(getdate()-buhuoTime+onlineTime) 
      end as 单位时间内销售, id as 产品ID号 
    from tabname
    order by 1 desc
      

  2.   

    怎么看得很别扭啊!DATETIME是时间点啊,不是时间段啊。这个
    “缺货时间(quehuoTime)-补货时间(buhuoTime)+以往的在线时间(onlineTime) ”
    能求出总的在线时间?
      

  3.   

    你这个问题问的很好,所以那个onlineTime 字段就是保存以往的时间段,每次缺货,我都要加上上次的在线时间
    确切的说 onlineTime=onlineTime+以前的在线时间 就是保存到这次刚缺货时的以前所有在线时间,当现在补货时,他就要计算这次补货到目前时间,因为他都在线的
    所以有2种情况 
    1,如果这个产品缺货了(stock <=0) 那么这个产品的总的在线时间为:缺货时间(quehuoTime)-补货时间(buhuoTime)+以往的在线时间(onlineTime) 
    2,如果这个产品不缺货(stock>0) 那么这个产品的总的在线时间为:现在时间(getdate())-补货时间(buhuoTime)+以往的在线时间(onlineTime) 
    注意我上面的相加的时间点,是让你们理解这个意思,计算的时候,应该求时间差换成小时再与以往的在线时间(onlineTime)相加
      

  4.   

    不好意思啊,我上面的相加的时间点,是让你们理解这个意思,计算的时候,应该求时间差换成小时再与以往的在线时间(onlineTime)相加的
      

  5.   

    有7个字段 
    ID 产品ID号 
    stock  产品库存:整型  
    solded 产品销售数量:整型 
    addTime    产品添加时候的时间:datetime型 
    quehuoTime  产品缺货时间:datetime型 
    buhuoTime  产品补货时间:datetime型 
    onlineTime  产品以往的在线时间(小时数):整型,是用小时来计算时间差的 有2种情况 
    1,如果这个产品缺货了(stock <=0) 那么这个产品的总的在线时间为:缺货时间(quehuoTime)-补货时间(buhuoTime)+以往的在线时间(onlineTime) 
    2,如果这个产品不缺货(stock>0) 那么这个产品的总的在线时间为:现在时间(getdate())-补货时间(buhuoTime)+以往的在线时间(onlineTime) ---
    select *
    from ta
    order by solded /(case when stock <=0 then (datediff(h,buhuoTime,quehuoTime)+onlineTime) else
            (datediff(h,buhuoTime,getdate())+onlineTime)  end)