2016-03-24 12 views
0

Ich arbeite mit zwei (2) Tabellen in meiner MS Access-Datenbank. ChangeCodes und Artikel. ChangeCodes hat die folgenden Spalten (Präfix, Suffix und Beschreibung).MS Access-Tabelle: Füllen einer Spalte basierend auf anderen mit SWITCH

Hier sind Beispielzeilen:

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 

Artikel hat die folgenden Spalten (ITEM_ID, ITEM_NAME, Entered_Date, Defect_Num, Mod_Num, User_Entered, Code_Flag, Complete_Flag)

Hier sind Beispielzeilen:

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 

Wie Sie sehen, Item_ID ist eine Kombination der ChangeCodes.Preix und ein 4-stelliges Suffix. Ich möchte das Suffix jeder Zeile der ChangeCodes-Tabelle mit dem MAX-Wert der entsprechenden Item_ID in der Items-Tabelle auffüllen. Ist das SQL das wird das tun? Ich habe Folgendes versucht, aber die Syntax ist nicht korrekt.

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; 

Irgendeine Idee, wie man es erreicht?

Antwort

0

Wenn ich das gut verstanden habe, haben Sie Ihre Tabelle Items-ID mit einigen Werten und Sie möchten Änderungscodes basierend auf Ihrer Artikeltabelle auffüllen.

Auf Ihre Abfrage haben Sie Mid (Max (Items.Item_ID), 3,4). Max arbeitet nur mit Zahlen und Item_ID ist eine Zeichenfolge "BE0999".

Sie können versuchen, diesen Ausdruck für Max zu ändern (CDec (Mid (Items.Item_ID), 3,4)) oder Max (CInt (Mid (Items.Item_ID), 3,4)).

Die mittlere Funktion wird Ihnen diesen Teil des Codes "0999" bringen, aber es ist immer noch eine Zeichenfolge, die Sie in Zahl konvertieren müssen, bevor Sie Max mit CInt oder CDec verwenden.

Nicht sicher, ob es funktioniert, aber einen Versuch wert.

+0

Beachten Sie auch, dass Sie beginnen, von 0 zu zählen, so dass dies geeigneter sein kann Max (CInt (Mid (Items.Item_ID), 2,4)) oder Max (CDec (Mid (Items.Item_ID), 2,4)) . – mdiaz

+0

Keine der Spalten sind als Zahlen definiert. Die meisten sind Kurztext. Das innere SELECT scheint unabhängig vom SWITCH zu funktionieren (Fall). SELECT Mid (Max (Items.Item_ID), 3,4) AS Expr1 FROM Artikel WHERE Items.Item_ID LIKE 'TC *'; gibt vier (4) Ziffern zurück, die in dieser Präfixgruppe am höchsten sind - was ich will. –

Verwandte Themen