select A.代码,A.名称,A.类别ID,B.库存量,B.缺少数量 from 配件 A,
  (select C.代码,
         (case when D.数量 is null then 0 when not D.数量 is null then D.数量 end)as 库存量,
         (case when (C.数量-D.数量) is null then C.数量 when not (C.数量-D.数量) is null then C.数量-D.数量 end) as 缺少数量 
            from temp2 C left join 库存 D on C.代码=D.代码 where C.数量>D.数量 or (not exists(select * from 库存 where C.代码=D.代码))) B 
              where A.代码=B.代码上面语句在SQL SERVER下能运行,但我用VB的ADO2.6就运行出错。能否改成在ADO2.6下也能运行?只要得出相同的结果就行了,效率并不在乎。

解决方案 »

  1.   

    select A.代码,A.名称,A.类别ID,B.库存量,B.缺少数量 from 配件 A,
      (select c.代码,iif(d.数量 is null ,0,d.数量) as 库存量,
              iif((c.数量 - d.数量) is null,c.数量,(c.数量 - d.数量)) as 缺少数量
       from temp2 C left join 库存 D 
         on C.代码=D.代码 
         where C.数量>D.数量 or 
               (not exists(select * from 库存 where C.代码=D.代码))) B 
    where A.代码=B.代码
      

  2.   

    先在SQL server 运行
    检查语句有没有写错的地方
    通过后
    可以放到vb中使用
      

  3.   

    iif()好象是不能用的,isnull()倒可以在sql server下用。
    我上面的语句sql server下是可以正确运行的,但不知是不是ado2.6 不支持case when 还是什么,就是不行。
    对象 'open' 的方法 '_Recordset'失败
      

  4.   

    select A.代码,A.名称,A.类别ID,B.库存量,B.缺少数量 from 配件 A,
      (select C.代码,
             (case when isnull(D.数量) then 0 else D.数量 end)as 库存量,
      

  5.   

    case是支持的呀,是不是你的數據驅動程序的問題
      

  6.   

    ado2.6 支持case吗?我试了怎么也不行,就是那儿出错。昨天晚上把它改写出来了,在VB下能用了。
    select A.代码,A.名称,A.类别ID,B.库存量,B.缺少数量 from 配件 A,(select C.代码,D.数量 as 库存量,C.数量-D.数量 as 缺少数量 from temp2 C left join 库存 D on C.代码=D.代码 where C.数量>D.数量 union select C.代码,0 as 库存量,C.数量 as 缺少数量 from temp2 C left join 库存 D on C.代码=D.代码 where not exists(select * from 库存 where C.代码=D.代码)) as B where A.代码=B.代码