2013-12-11 2 views
0

У меня есть таблица в форматенайти строки, которые имеют одинаковые значения в разных столбцах

ID | DC1 | DC2 | DC3 | DC4

1 | черная стрелка | синяя коробка | коричневый сахар | черная коронка

2 | красный клык | желтый свиток | зеленый бархат | белый шоколад |

3 | синее море | красная рыба | черное окно | великое море

Что мне нужно в 2007 запроса доступа, который будет возвращать строки, в которых все слова от DC4 включены в DC1, поэтому в приведенном выше случае, строки 1 и 3.

Любые идеи?

+0

Является ли пространство разделителем для каждого слова? Ожидается ли максимальное количество пробелов? – Mike

+0

это может быть что угодно. например, запись 1 может быть 1 | BlaCk (aRRow) | синяя коробка | коричневый сахар | черная корона, и мне все равно понадобится, чтобы показать мои результаты. – Themis

ответ

0

Вы не сможете запросить эти данные простым запросом.

Во-первых, вам необходимо будет нормализовать данные в D4. Поскольку это Access, вы можете использовать цикл VBA для разделения значений на другую таблицу.

Вы можете сделать что-то вроде этого: создать новую таблицу «Таблица2» с целым столбцом ID (который не автоинкремент) и текстовый столбец DC4. Затем заполнить Table2 так:

Public Sub SplitValues() 

    Dim sourceSet As Recordset 
    Dim destinationSet As Recordset 
    Dim iterator As Integer 
    Dim sourceID As Integer 
    Dim stringArray() As String 
    Set sourceSet = CurrentDb.OpenRecordset("Select ID, DC4 From Table1") 

    CurrentDb.Execute ("Delete From Table2") 

    Set destinationSet = CurrentDb.OpenRecordset("Table2") 

    While sourceSet.EOF = False 
     sourceID = sourceSet("Id") 
     stringArray = Split(sourceSet("DC4").Value, " ") 
     For iterator = 0 To UBound(stringArray) 
      With destinationSet 
       .AddNew 
       !ID = sourceID 
       !DC4 = stringArray(iterator) 
       .Update 
      End With 
     Next 
     sourceSet.MoveNext 
    Wend 

End Sub 

Затем вы можете сделать запрос между исходной таблицей (давайте назовем его «Table1») и новая таблица («Table2»). Запрос будет что-то вроде этого:

Select Table1.ID, Table1.DC1, Table1.DC4 
From Table1 
    Inner Join Table2 
    On Table1.DC1 Like '*' & Table2.DC4 & '*' 
    And Table1.ID = Table2.ID 

Если DC4 имеет несколько значений, которые повторяются, вы можете использовать Select Distinct.

+0

Спасибо! Это сработало! – Themis

Смежные вопросы