物料代码就象这样: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)
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)
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实现多表连接查询
物料代码 物料名称 规格型号 安全库存 实际库存 差别 物料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开头的数据里面把小于安全库存的数据找出来
是可以查询的,结果为所有低于安全库存的都给查出来,但我不需要它帮我查这么多
我只想在这个结果里面找出 01开头的结果,但加了这句话就什么都查不到,不晓得是什么原因
from (你把三张表As 成一个表,然后写在这里)
where 物料代码 like '01%'
and 实际库存<安全库存
你要是能正确的查询出三张表的数据,就是你贴得
原始数据(是3张表查询的结果,在这里我把他合并为一张表)
这样下面就好做了。
我感觉你的问题在这个查询出三张表的数据上面,
因为是多表连接查询,又用到聚合函数,所以只能这样写:
having t_ICItemBase.FSecInv >0 and SUM(ICInventory.FQty) <=t_ICItemBase.FSecInv
这个条件如果放在where面是不对的
还有结果。这样才能写SQl,
我最大的疑问就是 如果不加 where t_ICItemCore.FNumber like '01%' 这句话
就可以查询所有小于安全库存的物料,
但加了这句话就什么也查不到,这个真奇怪!