【问题标题】:find rows that have similar values to different columns查找与不同列具有相似值的行
【发布时间】:2013-12-11 23:03:29
【问题描述】:

我有一个格式如下的表格

ID | DC1 | DC2 | DC3 | DC4

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

2 |红方|黄色卷轴|绿丝绒|白巧克力|

3 |蓝色的大海|红鱼| 高分辨率照片| CLIPARTO黑窗|大海

我需要的是一个 ACCESS 2007 查询,它将返回 DC1 中包含来自 DC4 的任何单词的行,因此在上述情况下为第 1 行和第 3 行。

有什么想法吗?

【问题讨论】:

  • 每个单词的分隔符是空格吗?是否有最大空格数?
  • 它可以是任何东西。例如记录 1 可能是 1|黑色 (箭头) |蓝盒|红糖|黑皇冠,我仍然需要它来显示我的结果

标签: sql ms-access stored-procedures


【解决方案1】:

您将无法通过简单的查询来查询此数据。

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

您可以执行以下操作:创建一个新表“Table2”,其中包含整数列 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

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 2017-01-13
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-27
    • 2012-06-18
    • 2016-05-21
    相关资源
    最近更新 更多