物料代码就象这样:01.01.001 
SELECT  t_ICItemCore.FNumber AS 物料代码, 
    t_ICItemCore.FName AS 物料名称, 
    t_ICItemCore.FModel AS 规格型号, 
    t_ICItemBase.FSecInv AS 安全库存, 
    SUM(ICInventory.FQty) as 实际库存, 
    SUM(ICInventory.FQty)-convert(float,t_ICItemBase.FSecInv) As 差别, 
    t_ICItemCore.FItemID AS 物料ID 
    FROM t_ICItemCore 
        RIGHT OUTER JOIN t_ICItemBase ON t_ICItemCore.FItemID = t_ICItemBase.FItemID 
            LEFT OUTER JOIN ICInventory ON t_ICItemBase.FItemID = ICInventory.FItemID         --我想查询的是所有01开头的物料代码里面低于安全库存的物料,但加上下面这个条件就什么也查不出来 
    --where t_ICItemCore.FNumber like '01%' (不加这个条件查询的是所有低于安全库存的物料,但加上这个条件就什么也查不出来)     group by t_ICItemCore.FItemID,t_ICItemCore.FModel,t_ICItemCore.FName,t_ICItemCore.FNumber,t_ICItemBase.FSecInv    
    having t_ICItemBase.FSecInv >0 and SUM(ICInventory.FQty) <=t_ICItemBase.FSecInv 
    order by 物料代码 
帮我看看哪里错了,主要是2个条件: 物料代码必须是 01开头,查询的物料实际库存 <= 安全库存(安全库存>0) 

解决方案 »

  1.   

    不是 where t_ICItemCore.FNumber like '01%' 的问题是下面这些的问题,SUM(ICInventory.FQty)-convert(float,t_ICItemBase.FSecInv) As 差别, t_ICItemBase.FSecInv    having t_ICItemBase.FSecInv >0 and SUM(ICInventory.FQty) <=t_ICItemBase.FSecInv 你贴几个数据,然后标明字段名,
      

  2.   

    大概就象这样:物料代码    物料名称    规格型号  安全库存  实际库存  差别   物料ID
    01.01.001  自行车1    XYZ      100      80       -20  1999
    01.01.002  自行车2    XYZ      100      50       -50  2000
    01.01.003  自行车3    XYZ      100      30       -70  2001
    01.01.004  自行车4    XYZ      100      10       -90  2002
    01.01.005  自行车5    XYZ      100      40       -60  2003上面的结果全部都是 01开头的,并且实际库存小于安全库存的所有物料,我就是想要这样的结果,
    把同一个物料代码范围的所有不合格的数据找出来这是通过3张表查询的数据 主表为 t_ICItemCore,   表t_ICItemBase只存放安全库存,   表ICInventory.FQty只存放实际库存通过ID实现多表连接查询
      

  3.   

    原始数据(是3张表查询的结果,在这里我把他合并为一张表)
    物料代码    物料名称    规格型号  安全库存  实际库存  差别  物料ID 
    01.01.001  自行车1    XYZ      100      80      -20  1999 
    01.01.002  自行车2    ddd      100      120      20  2000 
    01.01.003  自行车3    XYZ      100      50      -50  2001 
    01.01.004  自行车4    ddd      100      200     100  2002 
    01.01.005  自行车5    XYZ      100      10      -90  2003 
    01.01.006  自行车6    XYZ      100      1100    1000  2004
    01.01.007  自行车7    fff      100      55      -45  2005 
    01.01.008  自行车8    XYZ      100      200     -60  2006
    02.01.110  自行车3    XYZ      100      200     -60  2022
    03.01.111  自行车0    ggg      100      200     -60  2044
    03.02.112  自行车8    XYZ      100      200     -60  2058
    03.04.113  自行车5    bbb      100      200     -60  2090
    04.01.119  自行车7    XYZ      100      200     -60  4006
    04.05.222  自行车8    lll      100      200     -60  4011查询后的数据:
    01.01.001  自行车1    XYZ      100      80      -20  1999 
    01.01.003  自行车3    XYZ      100      50      -50  2001
    01.01.005  自行车5    XYZ      100      10      -90  2003 
    01.01.007  自行车7    XYZ      100      55      -45  2005 
    01.01.008  自行车8    XYZ      100      200     -60  2006这就是我要的结果:在 代码为01开头的数据里面把小于安全库存的数据找出来
      

  4.   

    我的查询代码如果不加 where t_ICItemCore.FNumber like '01%' 这句话
    是可以查询的,结果为所有低于安全库存的都给查出来,但我不需要它帮我查这么多
    我只想在这个结果里面找出 01开头的结果,但加了这句话就什么都查不到,不晓得是什么原因
      

  5.   

    select 物料代码,物料名称,规格型号,安全库存,实际库存,差别,  物料ID
     
    from (你把三张表As 成一个表,然后写在这里)
    where  物料代码 like '01%'
    and 实际库存<安全库存
    你要是能正确的查询出三张表的数据,就是你贴得
    原始数据(是3张表查询的结果,在这里我把他合并为一张表) 
    这样下面就好做了。
    我感觉你的问题在这个查询出三张表的数据上面,
      

  6.   

    楼上的确实可以,但我这里用到了聚合函数,所以按照你的代码可能不能执行
    因为是多表连接查询,又用到聚合函数,所以只能这样写:
    having t_ICItemBase.FSecInv >0 and SUM(ICInventory.FQty) <=t_ICItemBase.FSecInv 
    这个条件如果放在where面是不对的
      

  7.   

    你把每一个表的数据,字段名,都贴出来。然后是关联关系,
    还有结果。这样才能写SQl,
      

  8.   

    好的,回去把表贴出来
    我最大的疑问就是 如果不加 where t_ICItemCore.FNumber like '01%' 这句话
    就可以查询所有小于安全库存的物料,
    但加了这句话就什么也查不到,这个真奇怪!
      

  9.   

    convert(float,t_ICItemBase.FSecInv)改为 cast (t_ICItemBase.FSecInv as int )试试