交叉表查询后出现空值,如何让空值默认为0

时间:2022-09-18 21:01:04
现在有一个表要做交叉表查询,
查询完后出现了空值,如何才能让空值为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


引用 1 楼 ACMAIN_CHM 的回复:
后面的什么计算?建议上传你的mdb样本文件。 



其实后面的计算也就是一些加减运算,
这主要是一个库存的问题,现在的是一个预测值,
接下来需要用原来的库存量减去交叉表生成后的值
因为是空值,用一个数减去空值后也变成了空值,而实际需要的是原库存减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


引用 3 楼 ACMAIN_CHM 的回复:
由于你不肯再提供更多信息,只能用如下方法了。但不推荐这种方法效率很差。一般应该在其它部分进行优化。 


SQL codeTRANSFORM 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…


怎么把原表发上去?
到哪发?

#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


引用 1 楼 ACMAIN_CHM 的回复:
后面的什么计算?建议上传你的mdb样本文件。 



其实后面的计算也就是一些加减运算,
这主要是一个库存的问题,现在的是一个预测值,
接下来需要用原来的库存量减去交叉表生成后的值
因为是空值,用一个数减去空值后也变成了空值,而实际需要的是原库存减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


引用 3 楼 ACMAIN_CHM 的回复:
由于你不肯再提供更多信息,只能用如下方法了。但不推荐这种方法效率很差。一般应该在其它部分进行优化。 


SQL codeTRANSFORM 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…


怎么把原表发上去?
到哪发?

#5


#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


这个贴先结了,,
那个问题继续问~~
不然显得太不厚道了~~~