繁体   English   中英

如何使用SQL查询在MS Access VBA中执行串联操作?

[英]How to perform concatenate operation in ms access vba using sql query?

我下面在ms访问中提到了称为[Info]的表。

AB      JDE     Quantity        PO            SMP
IND     AB7049      15      F258738OD       10176
IND     AM7619      21      F258738OD       10176
IND     AS9147      20      F258738OD       10176
ARU     AM7619      8       F118215OG       10176
ARU     AM7619      16      F118215OG       10176
ARU     AM7619      8       F118215OG       10176
ARU     AM7619      12      F258210OD       10176
ARU     AM7619      24      F258210OD       10176
ARU     AM9147      120     F257894OD       10176
ARU     AM9147      102     F257894OD       10176
ARU     AS9147      18      F257905OD       10176
ARU     AS9147      30      F257905OD       10176

在这里,我要执行连接和求和操作,如下表所示。

 AB     JDE                     Quantity        PO                                       SMP
IND     AB7049, AM7619, AS9147      56      F258738OD                                   10176
ARU     AM7619, AM9147, AS9147      338     F118215OG, F258210OD, F257894OD, F257905OD  10176

在这里,宏需要连接唯一的JDE和唯一的PO,还需要对与JDE和PO相关的数量求和。 SMP列是主键。

请帮我解决这个问题。

首先,SMP似乎不是主键。

我的方法是使用VBA函数获取简洁的字符串,然后在SQL中进行其余操作。

VBA功能:

Public Function getConcValues(ByVal pTablename As String, ByVal pFieldname As String, ByVal pSearchColumn As String, ByVal pSearchValue As String) As String
    Dim rs As DAO.Recordset
    Dim ret As String
    Dim sql As String

    ' prepare SQL
    sql = ""
    sql = sql & "Select distinct [" & pFieldname & "] "
    sql = sql & "  From [" & pTablename & "] "
    sql = sql & " Where [" & pSearchColumn & "] = '" & pSearchValue & "' "
    sql = sql & "Order By [" & pFieldname & "]"

    ' initialize return value
    ret = ""

    ' retrieve unique values based on search criterias
    Set rs = CurrentDb.OpenRecordset(sql)
    Do Until rs.EOF
        ' add content to return value
        ret = ret & rs.Fields(0) & ", "
        rs.MoveNext
    Loop

    ' trim last comma if requiered
    If Len(ret) > 0 Then
        ret = Left(ret, Len(ret) - 2)
    End If

    ' cleanup
    rs.Close
    Set rs = Nothing

    ' return result
    getConcValues = ret
End Function

然后可以在SQL中使用它:

SELECT 
    AB, 
    getConcValues("info","JDE","AB",[AB]) AS JDE, 
    Sum(Quantity) AS SumOfQuantity, 
    getConcValues("info","PO","AB",[AB]) AS PO, 
    SMP
FROM info
GROUP BY 
    AB, 
    getConcValues("info","JDE","AB",[AB]), 
    getConcValues("info","PO","AB",[AB]), 
    SMP;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM