Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 将Access表中的多个列连接到一个特定行_Sql_Ms Access_Vba - Fatal编程技术网

Sql 将Access表中的多个列连接到一个特定行

Sql 将Access表中的多个列连接到一个特定行,sql,ms-access,vba,Sql,Ms Access,Vba,我一直在网上寻找答案,但我就是找不到一个有效的答案。我确信这是我做得不对的 我在Access中有一个名为TBL003_Combined Data的表,该表具有以下列: 上传、参考ID、数量、零件号、项目说明、发货至 2015年4月8日,123、20、9125xtr,样本项目,XYZ公司,地址:美国某处,地址:159632 2015年4月8日,美国某地地址巷789号XYZ公司样本项目2,邮编:159632 2015年4月8日,美国某地地址巷789号XYZ公司样本项目3号,邮编159632 我要做的

我一直在网上寻找答案,但我就是找不到一个有效的答案。我确信这是我做得不对的

我在Access中有一个名为TBL003_Combined Data的表,该表具有以下列: 上传、参考ID、数量、零件号、项目说明、发货至 2015年4月8日,123、20、9125xtr,样本项目,XYZ公司,地址:美国某处,地址:159632 2015年4月8日,美国某地地址巷789号XYZ公司样本项目2,邮编:159632 2015年4月8日,美国某地地址巷789号XYZ公司样本项目3号,邮编159632

我要做的是,对于每个唯一的[REF ID],我想将数量、[零件号]、[项目说明]和[SHIP to]连接到一个名为[CS_项目说明]的新列

我在艾伦·布朗的网站上尝试了以下内容:

Public Function ConcatRelated(strField As String, _
    strTable As String, _
    Optional strWhere As String, _
    Optional strOrderBy As String, _
    Optional strSeparator = ", ") As Variant
On Error GoTo Err_Handler
    'Purpose:   Generate a concatenated string of related records.
    'Return:    String variant, or Null if no matches.
    'Arguments: strField = name of field to get results from and concatenate.
    '           strTable = name of a table or query.
    '           strWhere = WHERE clause to choose the right values.
    '           strOrderBy = ORDER BY clause, for sorting the values.
    '           strSeparator = characters to use between the concatenated values.
    'Notes:     1. Use square brackets around field/table names with spaces or odd characters.
    '           2. strField can be a Multi-valued field (A2007 and later), but strOrderBy cannot.
    '           3. Nulls are omitted, zero-length strings (ZLSs) are returned as ZLSs.
    '           4. Returning more than 255 characters to a recordset triggers this Access bug:
    '               http://allenbrowne.com/bug-16.html
    Dim rs As DAO.Recordset         'Related records
    Dim rsMV As DAO.Recordset       'Multi-valued field recordset
    Dim strSQL As String            'SQL statement
    Dim strOut As String            'Output string to concatenate to.
    Dim lngLen As Long              'Length of string.
    Dim bIsMultiValue As Boolean    'Flag if strField is a multi-valued field.

    'Initialize to Null
    ConcatRelated = Null

    'Build SQL string, and get the records.
    strSQL = "SELECT DISTINCT " & strField & " FROM " & strTable
    If strWhere <> vbNullString Then
        strSQL = strSQL & " WHERE " & strWhere
    End If
    If strOrderBy <> vbNullString Then
        strSQL = strSQL & " ORDER BY " & strOrderBy
    End If
    Set rs = DBEngine(0)(0).OpenRecordset(strSQL, dbOpenDynaset)
    'Determine if the requested field is multi-valued (Type is above 100.)
    bIsMultiValue = (rs(0).Type > 100)

    'Loop through the matching records
    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
                    strOut = strOut & rsMV(0) & strSeparator
                End If
                rsMV.MoveNext
            Loop
            Set rsMV = Nothing
        ElseIf Not IsNull(rs(0)) Then
            strOut = strOut & rs(0) & strSeparator
        End If
        rs.MoveNext
    Loop
    rs.Close

    'Return the string without the trailing separator.
    lngLen = Len(strOut) - Len(strSeparator)
    If lngLen > 0 Then
        ConcatRelated = Left(strOut, lngLen)
    End If

Exit_Handler:
    'Clean up
    Set rsMV = Nothing
    Set rs = Nothing
    Exit Function

Err_Handler:
    MsgBox "Error " & Err.Number & ": " & Err.Description, vbExclamation, "ConcatRelated()"
    Resume Exit_Handler
End Function
我不断发现以下错误:

查询表达式中缺少运算符的语法错误

然后在上面列出我引用的整个SQL。如果你能帮我指出正确的方向,或者告诉我为什么我做错了,我肯定是我自己,我将不胜感激

补充:我试图得出的结果是数据如下所示:

上传,参考ID,CS\U项目描述 2015年4月8日、123、20/9125xtr/样本项目/16/22578xtz/样本项目2/8/7758rty/样本项目3/XYZ公司,地址:789地址:美国某地,邮编:159632

SELECT distinct [REF ID],
[QTY] + ' ' + [PART NUMBER] + ' ' + [ITEM DESCRIPTION] + ' ' + [SHIP TO] 
AS 'CS_ITEM DESCRIPTIONS' 
FROM [TBL003_Combined Data];

谢谢Jeremy W,但它仍然给了我一个语法错误。此外,我认为+的作用类似于&,字符串,因为它将连接每一行,但我需要将整个列合并成一行。我一直在绞尽脑汁,所以任何其他建议都将不胜感激:如果您不是指串联,那么“列合并成一行”是什么意思?很抱歉造成混淆。我确实希望将4个不同列中的项连接到一个字段行中,就像上面的示例数据一样。+不起作用,仍然出现语法错误,我认为+类似于&,我已经尝试过了,但它只会连接每行,我需要将整个列连接在一个单元格行中。这可能吗?目前,我正在Excel中执行此操作,然后将数据导入到数据库中,并获得结果,也许这是我实现目标的唯一方法。任何帮助我在Access中完成此操作的建议都将不胜感激。
SELECT distinct [REF ID],
[QTY] + ' ' + [PART NUMBER] + ' ' + [ITEM DESCRIPTION] + ' ' + [SHIP TO] 
AS 'CS_ITEM DESCRIPTIONS' 
FROM [TBL003_Combined Data];