Table model 我有一个名为“ MYSTERY_SHOPPER”的表,该表已加载每月数据。如您在图像中看到的,二月已加载,但“ Lista de Precio”列中没有值,因此我需要加载上个月的值,比较“ Modelo”列中加载的模型是否相同作为上个月。
Dim rs As Recordset
Dim datefield As String
Dim modelfield As String
Dim pricefield As String
Dim modeldict As Object
Set modeldict = CreateObject("Scripting.Dictionary")
Set rs = CurrentDb.OpenRecordset("MYSTERY_SHOPPER")
With rs
.MoveFirst
Do Until .EOF
datefield = ![Fecha]
modelfield = ![Modelo]
If Not IsNull(![Precio de Lista]) Then
pricefield = ![Precio de Lista]
If Not modeldict.Exists(modelfield) Then
modeldict.Add modelfield, datefield & "|" & pricefield
Else
If Split(modeldict(modelfield), "|")(0) < datefield Then
modeldict(modelfield) = datefield & "|" & pricefield
End If
End If
Else
.Edit
![Precio de Lista] = Split(modeldict(modelfield), "|")(1)
.Update
End If
.MoveNext
Loop
End With
我想到了类似的方法,但是它不起作用,它什么也没做。
请帮助。
答案 0 :(得分:0)
您可以使用update
查询来填充空价格,例如:
update mystery_shopper m
set
m.[precio de lista] =
dlookup
(
"[precio de lista]",
"mystery_shopper",
"modelo = '" & m.modelo & "' and fecha = " &
format
(
nz
(
dmax
(
"fecha",
"mystery_shopper",
"modelo = '" & m.modelo & "' and fecha < " &
format(m.fecha,"\#mm\/dd\/yyyy\#")
)
,#1901-01-01#
)
,"\#mm\/dd\/yyyy\#"
)
)
where
m.[precio de lista] is null or m.[precio de lista] = 0
我一直使用域聚合函数dlookup
和dmax
,因为我相信使用相关子查询来获取最新价格将导致查询变得不可更新,尽管可能存在解决这个问题的更好方法。
或者,您可以通过3个步骤解决此问题:
执行查询以创建一个临时表,其中包含每个modelo
的最新价格:
select m.modelo,
(
select top 1 n.[precio de lista]
from mystery_shopper n
where n.modelo = m.modelo and n.fecha < m.fecha
order by n.fecha desc
) as precio
into temp_table
from
mystery_shopper m
where
m.[precio de lista] is null or
m.[precio de lista] = 0
使用update
查询来更新mystery_shopper
表中的价格,从临时表中获取数据:
update mystery_shopper m inner join temp_table t on m.modelo = t.modelo
set m.[precio de lista] = t.precio
where
(m.[precio de lista] is null or m.[precio de lista] = 0) and
t.precio is not null and
t.precio <> 0
删除临时表:
drop table temp_table
答案 1 :(得分:0)
原因是![Precio de Lista]
中存在一个值,该值仅为0。要填充该值,除了null外,还需要检查0。
更改此行:
If Not IsNull(![Precio de Lista]) Then
收件人:
If Not (IsNull(![Precio de Lista]) or ![Precio de Lista] = 0) Then
应该可以解决问题