2014-10-29 28 views
0

我在下面提到的ms訪問表中稱爲[Info]。如何使用sql查詢在ms access中執行連接操作?

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相關的qunatity。 SMP列是主鍵。

請幫我解決這個問題。

+0

我試圖使用連擊功能,但我得到了一些error.unfortunately我刪除了它。 – user2066958 2014-10-29 09:22:03

回答

0

第一個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;