MS Access表:使用SWITCH基于其他列填充一列

时间:2016-03-24 16:01:47

标签: ms-access-2013

我在MS Access数据库中使用两(2)个表。 ChangeCodes和Items。 ChangeCodes具有以下列(前缀,后缀和描述)。

以下是示例行:

Prefix  Suffix  Description
BE  2178    Business Enhancement
DP  1033    Development Problem
PE  2137    Performance Enhancement
PP  1687    Production Problem
TC  1001    Temporary Change
TE  1003    Technical Enhancement
WA  1005    Work Around

Items包含以下列(Item_ID,Item_Name,Entered_Date,Defect_Num,Mod_Num,User_Entered,Code_Flag,Complete_Flag)

以下是示例行:

BE0999  Fee Increment Stuffer   8/9/2001        NW5639  nakiris Yes Yes 
PE1084  Regionalizing RA99Z5UT  5/27/2008       NW7128  LUCKMAB Yes No  
PE1480  Resiliency task 300     2/22/2013       NW7768  SOUNDM2 No  No  
PP1092  Bad check               11/3/2003       NW6828  sangis1 No  No  
PP1093  To Avoid contention     11/7/2003       NW6829  narass1 No  No  
PP1094  Change to ensure ZERO   11/12/2003      NW6830  paletic No  No  

如您所见,Item_ID是ChangeCodes.Preix和4位数后缀的组合。我希望使用Items表中相应Item_ID的MAX值填充ChangeCodes表的每一行的后缀。这个SQL会这样做吗?我尝试了以下但语法不正确。

SELECT 
IIf([ChangeCodes.Prefix] = "BE", SELECT Mid(Max(Items.Item_ID),3,4) AS Expr1
        FROM Items
        WHERE Items.Item_ID LIKE 'BE*';),   
IIf([ChangeCodes.Prefix] = "DP", SELECT Mid(Max(Items.Item_ID),3,4) AS Expr1
        FROM Items
        WHERE Items.Item_ID LIKE 'DP*';),
IIf([ChangeCodes.Prefix] = "PE", SELECT Mid(Max(Items.Item_ID),3,4) AS Expr1
        FROM Items
        WHERE Items.Item_ID LIKE 'PE*';),
IIf([ChangeCodes.Prefix] = "PP", SELECT Mid(Max(Items.Item_ID),3,4) AS Expr1
        FROM Items
        WHERE Items.Item_ID LIKE 'PP*';),
IIf([ChangeCodes.Prefix] = "TC", SELECT Mid(Max(Items.Item_ID),3,4) AS Expr1
        FROM Items
        WHERE Items.Item_ID LIKE 'TC*';),
IIf([ChangeCodes.Prefix] = "TE", SELECT Mid(Max(Items.Item_ID),3,4) AS Expr1
        FROM Items
        WHERE Items.Item_ID LIKE 'TE*';),
IIf([ChangeCodes.Prefix] = "WA", SELECT Mid(Max(Items.Item_ID),3,4) AS Expr1
        FROM Items
        WHERE Items.Item_ID LIKE 'WA*';)
As Suffix 
FROM ChangeCodes;

知道如何完成它吗?

1 个答案:

答案 0 :(得分:0)

如果我理解这一点,那么您的表项ID就会包含一些值,并且您希望根据项目表填充更改代码。

在您的查询中,您有Mid(Max(Items.Item_ID),3,4)。 Max仅适用于数字,Item_ID是字符串" BE0999"。

您可以尝试将该表达式更改为Max(CDec(Mid(Items.Item_ID),3,4))或Max(CInt(Mid(Items.Item_ID),3,4))。

mid函数会为你提供这部分代码" 0999"但是在你使用CI或CDec使用Max之前,它仍然需要将它转换为数字。

不确定它是否有用但值得一试。