根据表格中的另一列更新列-MS Access

时间:2018-08-07 13:08:33

标签: vba ms-access

我有一个名为Game的表,其结构如下:

[Game_Name]      [Publisher]

表中的数据如下所示:

[Game_Name]      [Publisher]
                     1
                     3
                     1
                     2
                     2
                     1
                     3

Game_Name将为空白。这样,我想基于发布者列的值来更新Game_Name的值。

这应该如何工作:

如果对于Publisher列为1的每个实例(行),发布者= 1->,则Game_Name将为GM-1,... GM-n。因此,在此示例中,存在3个发布者为1的实例。因此,值将为GM-1,GM-2,GM-3。

如果发布者= 2,与上述类似,则期望格式为1-1,... n-n。因此,由于我们有2个发布服务器为2的实例,所以Game_Name的值为GM-1-1,GM-2-2。

最后,如果Publisher = 3,Game_Name的值将为1-1-1,... n-n-n。这里有三个实例,因此Game_Name的值为GM-1-1-1,GM-2-2-2,GM-3-3-3。

这是我目前的做法

UPDATE Game
SET Game_Name = 
SWITCH (Publisher = 1, "GM-"&[1+1],
Publisher = 2, "GM-"&[1+1]&"-"&[1+1],
Publisher = 3, "GM-"&[1+1]&"-"&[1+1]&"-"&[1+1])

我无法跟踪递增值以及何时重置。另外,这是否应该是宏。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

考虑:

SELECT ID, Publisher, "GM-" & Choose([Publisher],[GrpSeq],[GrpSeq] & "-" & [GrpSeq],[GrpSeq] & "-" & [GrpSeq] & "-" & [GrpSeq]) AS Game_Name
FROM (SELECT ID, Publisher, DCount("*","Game","Publisher = " & [Publisher] & " AND ID <" & [ID])+1 AS GrpSeq FROM Game) AS Q1;

请注意,这对于非常大的数据集可能会缓慢执行。在这种情况下,VBA方法可能更可取。如果发布者值明显多于3个,则VBA方法可能是唯一的选择。