【问题标题】:MS Access Concatenate function -- allow no duplicatesMS Access Concatenate 功能——不允许重复
【发布时间】:2015-11-24 22:08:19
【问题描述】:

通过 StackOverflow,我能够从以下位置找到我想要的内容:
Concatenating multiple rows into single line in MS Access [duplicate]
它利用了以下功能:
Concatenate values from related records
但我不知道如何不从正在连接的行中返回重复值。示例...我希望它为 Customer1 返回:

PartA, PartB, PartF

不是……

PartA, PartA, PartA, PartB, PartB, PartF  

老实说,我不确定如何使这个自定义函数像那样工作。我的查询是...

SELECT DISTINCT PART_NUMBER, 
ConcatRelated("SUPPLIER_NAME","tbl_supplier_list",
              "PART_NUMBER=""" & [PART_NUMBER] & """")
FROM tbl_supplier_list;`

【问题讨论】:

  • 在参数 3 中,声明“如果外键字段是文本(而不是数字),请包含引号作为分隔符,例如:“[ForeignKeyFieldName] = """ & [PrimaryKeyFieldName] & """"" 所以我使用它,因为键不仅是数字,还包括文本。

标签: sql vba ms-access


【解决方案1】:

修改ConcatRelated()函数from Allen Browne如下:

Do While Not rs.EOF
    If bIsMultiValue Then
        'For multi-valued field, loop through the values
        Set rsMV = rs(0).Value
        Do While Not rsMV.EOF
            If Not IsNull(rsMV(0)) Then
              If InStr(strOut, rsMV(0)) = 0 then  ''''' ADD THIS
                strOut = strOut & rsMV(0) & strSeparator
              End If                         ''''' ADD THIS
            End If
            rsMV.MoveNext
        Loop
        Set rsMV = Nothing
    ElseIf Not IsNull(rs(0)) Then
        strOut = strOut & rs(0) & strSeparator
    End If
    rs.MoveNext
Loop

InStr() 函数将检查当前值是否已经在输出字符串strOut 中。如果是(如返回零所示),If() 语句将确保不添加当前值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-05
    • 2021-09-14
    • 2012-08-16
    • 2013-08-12
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多