2016-03-24 12 views
0

私はMS Accessデータベースで2つのテーブルを使用しています。変更コードとアイテム。 ChangeCodesには、次の列(接頭辞、接尾辞、説明)があります。MSアクセステーブル:SWITCHを使用して他の列に基づいて1つの列を設定する

は、ここでのサンプル行です:

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 

アイテム次の列(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桁の接尾辞の組み合わせです。 ChangeCodesテーブルの各行のサフィックスにItemsテーブルの対応するItem_IDのMAX値を設定したいとします。これを行う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; 

これを達成する方法はありますか。

答えて

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"のこの部分を取得しますが、CIntまたはCDecを使用してMaxを使用する前に、数値に変換する必要がある文字列です。

それがうまくいくかどうかわかりませんが、試してみる価値があります。

+0

また、0から数えて開始することに注意してください。これにより、Max(CInt(Mid)、Items.Item_ID)、2,4)またはMax(CDec(Mid(Items.Item_ID)、2,4)) 。 – mdiaz

+0

列のいずれも数値として定義されていません。ほとんどが短文です。内側のSELECTはSWITCH(ケース)とは独立して動作するようです。 SELECT Mid(Max(Items.Item_ID)、3,4)AS Expr1 Items.Item_ID LIKE 'TC *';そのプレフィックスグループの中で最も高い4桁の数字を返します。これは私が望むものです。 –

関連する問題