查询完后出现了空值,如何才能让空值为0
原表如下(只给了列名,行太多,就不输了)
表名是T_FC_MAA/FAA
Material FC之总计 7day
交叉表查询语句如下
TRANSFORM Min([T_FC_MAA/FAA].[FC之总计]) AS FC之总计之最小值
SELECT [T_FC_MAA/FAA].[Material], Min([T_FC_MAA/FAA].[FC之总计]) AS [总计 FC之总计]
FROM [T_FC_MAA/FAA]
GROUP BY [T_FC_MAA/FAA].[Material]
PIVOT [T_FC_MAA/FAA].[7day];
但执行后出现了空值,后面无法计算下去,
用过IIf(Isnull(列名),0,列名),但执行不了,说无法循环调用了本身。
求高手指点~~~
10 个解决方案
#1
后面的什么计算?建议上传你的mdb样本文件。
#2
其实后面的计算也就是一些加减运算,
这主要是一个库存的问题,现在的是一个预测值,
接下来需要用原来的库存量减去交叉表生成后的值
因为是空值,用一个数减去空值后也变成了空值,而实际需要的是原库存减0得到的还是原值
所以需要在空值的地方默认输入0,不知道怎么实现这个操作
#3
由于你不肯再提供更多信息,只能用如下方法了。但不推荐这种方法效率很差。一般应该在其它部分进行优化。
TRANSFORM IIF(Min(t.[FC之总计])<1000000000,Min(t.[FC之总计]),0) AS FC之总计之最小值
SELECT t.[Material]
FROM (
select [Material],[7day],[FC之总计] from table2
union all
select t1.[Material],t2.[7day],9999999999
from [T_FC_MAA/FAA] t1,[T_FC_MAA/FAA] t2
) t
GROUP BY t.[Material]
PIVOT t.[7day];
#4
怎么把原表发上去?
到哪发?
#5
传到下面某一论坛吧。
QQ群 48866293 / 12035577 / 7440532 / 13666209
ACCESS专业论坛
http://www.accessbbs.cn/bbs/index.php .
http://www.office-cn.net/vvb/ .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .
#6
问题已解决~~
用一个NZ()函数可以把空值转为0
不过还是谢谢你~~
可惜做完这部,又来了新问题
举例
表1
Material qty
A 500
B 600
C 700
表2
Material P01 P02 P03 P04 P05 P06 P07
A 100 50 0 10 0 20 30
B 0 200 0 30 70 80 50
C 150 50 40 70 0 80 100
现在要创建一个查询,如下
查询1
Material P001 P002 P003 P004 ~~~~~~~~~
A 表1.qty-表2.P01 查询1.P001-表2.P02 查询1.P002-表2.P03 后面的类推,这是简化的,
B 后面大概还有50多个
c
就是想用调用查询本身的一些列,因为后面的列太多了,不知道有没有办法可以建立模块让它自动运行,,,
不知道我表达清楚了没~
PS:不知道需不需要重新发一个贴?不过要发也明天了,
#7
想做MRP计算吧。
可以建立模块让它自动运行,
但一般来说,是在做交叉表之前先做project on hand 的计算。建议重新思考一下你的设计。
#8
用NZ() OR IIF(ISNULL()),前者在ACCESS中,后者在ADO连接MDB中
#9
呵呵,自己解决更好,一般用IIF(ISNULL())
#10
这个贴先结了,,
那个问题继续问~~
不然显得太不厚道了~~~
那个问题继续问~~
不然显得太不厚道了~~~
#1
后面的什么计算?建议上传你的mdb样本文件。
#2
其实后面的计算也就是一些加减运算,
这主要是一个库存的问题,现在的是一个预测值,
接下来需要用原来的库存量减去交叉表生成后的值
因为是空值,用一个数减去空值后也变成了空值,而实际需要的是原库存减0得到的还是原值
所以需要在空值的地方默认输入0,不知道怎么实现这个操作
#3
由于你不肯再提供更多信息,只能用如下方法了。但不推荐这种方法效率很差。一般应该在其它部分进行优化。
TRANSFORM IIF(Min(t.[FC之总计])<1000000000,Min(t.[FC之总计]),0) AS FC之总计之最小值
SELECT t.[Material]
FROM (
select [Material],[7day],[FC之总计] from table2
union all
select t1.[Material],t2.[7day],9999999999
from [T_FC_MAA/FAA] t1,[T_FC_MAA/FAA] t2
) t
GROUP BY t.[Material]
PIVOT t.[7day];
#4
怎么把原表发上去?
到哪发?
#5
传到下面某一论坛吧。
QQ群 48866293 / 12035577 / 7440532 / 13666209
ACCESS专业论坛
http://www.accessbbs.cn/bbs/index.php .
http://www.office-cn.net/vvb/ .
http://www.accessoft.com/bbs/index.asp .
http://www.access-programmers.co.uk/forums .
.
http://www.office-cn.net/home/space.php?uid=141646 .
#6
问题已解决~~
用一个NZ()函数可以把空值转为0
不过还是谢谢你~~
可惜做完这部,又来了新问题
举例
表1
Material qty
A 500
B 600
C 700
表2
Material P01 P02 P03 P04 P05 P06 P07
A 100 50 0 10 0 20 30
B 0 200 0 30 70 80 50
C 150 50 40 70 0 80 100
现在要创建一个查询,如下
查询1
Material P001 P002 P003 P004 ~~~~~~~~~
A 表1.qty-表2.P01 查询1.P001-表2.P02 查询1.P002-表2.P03 后面的类推,这是简化的,
B 后面大概还有50多个
c
就是想用调用查询本身的一些列,因为后面的列太多了,不知道有没有办法可以建立模块让它自动运行,,,
不知道我表达清楚了没~
PS:不知道需不需要重新发一个贴?不过要发也明天了,
#7
想做MRP计算吧。
可以建立模块让它自动运行,
但一般来说,是在做交叉表之前先做project on hand 的计算。建议重新思考一下你的设计。
#8
用NZ() OR IIF(ISNULL()),前者在ACCESS中,后者在ADO连接MDB中
#9
呵呵,自己解决更好,一般用IIF(ISNULL())
#10
这个贴先结了,,
那个问题继续问~~
不然显得太不厚道了~~~
那个问题继续问~~
不然显得太不厚道了~~~