1

У меня 2 таблицы, которые даны (TABLE_A, TABLE_B) иSQL-запрос, который просматривает несколько значений из одной колонки для одной строки

нужна помощь для суб запроса или возможное решение для выбора нескольких значений из колонки TABLE_A.DESCRIPString

TABLE_A: 
ID  PARTNUM  DESCRIPString 
1  4456  121~134~111 
2  4457  122~111 
3  4458  122~134 
4  4459  111 
5  4460  121~134~111 

CROSS MATCH с TABLE_B.DESCRIPID

TABLE_B: 
ID  DESCRIPID DECSRIPLong 
1  121   Silver 
2  122   Black 
3  111   Mask 
4  134   Pickle 

И наконец DISPLAY следующее:

Table_AB 

ID  PARTNUM  DESCRIPString PARTDESCRIP 
1  4456  121~134~111  Silver~Pickle~Mask 
2  4457  122~111   Black~Mask 
3  4458  122~134   Black~Pickle 
4  4459  111    Mask 
5  4460  121~134~111  Silver~Pickle~Mask 

Я понимаю, что большинство людей рекомендуют переделать базу данных на Единую переменную на столбец, однако это невозможно сделать в этом случае.

ответ

0

Отбросьте эту функцию в модуль и запустите этот запрос. Он должен предоставить вам запрошенные результаты. Вы не указали типы данных, поэтому я пошел с вариантами в функции.

Public Function fnParseDescr(strWork As Variant) As String 
Dim vEnd 
Dim strTemp As String 
Dim strLook As String 
Dim strResult As String 
strResult = "" 
strWork = Trim(CStr(strWork)) 
Do While Len(strWork) > 0 
    If InStr(strWork, "~") = 0 Then 
     strLook = Trim(DLookup("[DESCRIPLong]", "TABLE_B", "[DESCRIPID] = CVar('" & strWork & "')")) 
     strResult = strResult & "~" & strLook 
     strWork = "" 
    Else 
     vEnd = InStr(strWork, "~") - 1 
     strTemp = Left(strWork, vEnd) 
     strLook = Trim(DLookup("[DESCRIPLong]", "TABLE_B", "[DESCRIPID] = CVar('" & strTemp & "')")) 
     strResult = strResult & "~" & strLook 
     strWork = Right(strWork, (Len(strWork) - (vEnd + 1))) 
     strTemp = "" 
     strLook = "" 
    End If 
Loop 
If Left(strResult, 1) = "~" Then strResult = Right(strResult, (Len(strResult) - 1)) 
fnParseDescr = strResult 
Exit Function 
End Function 


SELECT ID, 
    PARTNUM, 
    DESCRIPString, 
    fnParseDescr([DESCRIPString]) AS PARTDESCRIP 
FROM TABLE_A; 
Смежные вопросы