查找与不同列具有相似值的行

时间:2013-12-11 23:03:29

标签: sql ms-access stored-procedures

我有一个以下格式的表格

  

ID | DC1 | DC2 | DC3 | DC4

     

1 |黑色箭头|蓝盒子|红糖|黑冠

     

2 |红芳|黄色卷轴|绿色天鹅绒|白巧克力|

     

3 |蓝海|红鱼|黑色窗口|大海

我需要的是一个ACCESS 2007查询,它将返回DC1中任何单词包含在DC1中的行,因此在上面的第1行和第3行中。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您将无法使用简单查询查询此数据。

首先,您需要规范化D4中的数据。由于这是Access,因此您可以使用VBA循环将值拆分为不同的表。

您可以执行以下操作:使用整数列ID(不自动增量)和文本列DC4创建新表“Table2”。然后像这样填充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