2011-01-24 82 views
1

如果我有以下的MS Access表和樣本數據,MS訪問SQL查詢來連接或合併相關領域

Status tbl 
UpdateID PK 
CustomerNo text 
StatusType text 
UpdateDate date
UpdateID, CustomerNo, StatusType, UpdateDate 
001, 0099, Open, 2011-01-01 
002, 0099, Pend, 2011-01-02 
003, 0100, Open, 2011-01-03 
004, 0099, Appr, 2011-01-04 
005, 0100, Pend, 2011-01-05 
006, 0099, Clsd, 2011-01-07

然後我如何編寫一個查詢,會導致以下綜合/串聯輸出?

CustomerNo, UpdateDate 
0099, 2011-01-01;2011-01-02;2011-01-04;2011-01-07 
0100, 2011-01-03;2011-01-05
+0

我現在認識到UpdateDate是日期類型可以解決複雜的,但如果把它當作文本將簡化的答案,然後這就夠了。 – duckah 2011-01-24 18:39:35

回答

2

在Access中沒有使用代碼遍歷返回的行並自己構建字符串的方法。

下面是一些代碼,可以幫助你做到這一點:

Public Function ListOf(sSQL As String, Optional sSeparator As String = ", ") As String 

    Dim sResults As String 
    Dim rs As DAO.Recordset 

    Set rs = CurrentDb.OpenRecordset(sSQL) 

    While Not rs.EOF 

    If sResults = "" Then 
     sResults = Nz(rs.Fields(0).Value, "???") 
    Else 
     sResults = sResults + sSeparator & Nz(rs.Fields(0).Value, "???") 
    End If 

    rs.MoveNext 

    Wend 

    ListOf = sResults 

End Function 

這裏是你如何在Access查詢使用它:

SELECT [CustomerNo], 
(ListOf('SELECT [UpdateDate] FROM StatusTbl WHERE CustomerNo = ' + CStr([CustomerNo]))) AS UpdateDates 
FROM StatusTbl 

請注意,這僅適用,如果你」重新在Access中執行查詢,從(例如)ADO連接執行的查詢將無法訪問ListOf函數。

+0

我將此功能添加到模塊並保存,然後更新我的查詢,如圖所示。試圖運行查詢將返回編譯錯誤:「用戶定義類型未定義」,並指向「Dim rs As DAO.Recordset」行。 「DAO」的問題在這裏嗎? – duckah 2011-01-24 19:02:18