我搜索了“连接”主题,但无法找到我需要的答案。这个帖子差不多access sql query to concatenate rows,但我试图让它适合我的目的失败了。
我拥有的是这样一张桌子
Lic# | Permit | Year
------------------------
1 | NS1 | 2003
1 | NS1 | 2004
1 | NS2 | 2004
2 | TR | 2012
2 | NS2 | 2012
3 | OR | 2008
2 | OR | 2011
2 | NS1 | 2011
2 | TR | 2011
....等等。该表有许多唯一的许可证编号,其中列出了许可证类型和年份(从2003年至2012年)。
我想要的是创建一个显示如下信息的表
Lic# | Permit | Year
-----------------------------
1 |NS1 | 2003
1 | NS1, NS2 | 2004
2 | TR, NS2 | 2012
3 | OR | 2008
2 | OR, NS1, TR | 2011
答案 0 :(得分:3)
正如我在评论中发表的那样,使用MySQL中的group_concat()
函数很容易,但是如果你想在MS Access中这样做,我认为你必须使用VBA处理这个问题。
我建议你这个功能:
public function concatenatePermits(licNo as integer, year as integer)
dim db as DAO.database, rec as DAO.recordset, strSQL as string
dim ans as string
set db = currentdb()
strSQL = "select permit from [your table] " & _
"where [lic#]=" & licNo & " and year=" & year & ";"
set rec = db.openrecordset(strSQL, dbOpenDynaset, dbReadOnly)
ans = ""
with rec
.moveFirst
do
if ans = "" then
ans = !permit
else
ans = ans & "," & !permit
end if
loop until .EOF
end with
rec.close
db.close
concatenatePermits = ans
end function
此功能可用于任何查询。缺点:如果您的表格非常大,那么使用此功能的查询的执行可能非常慢。我认为更好的方法是创建一个空表,然后使用VBA逐行填充。
希望这会对你有所帮助。
使用VBA添加行
在评论中,您询问如何使用VBA向表中添加行。假设表存在,并且您希望将数据输入此表,我建议您使用以下内容:
public sub addData()
dim db as dao.database, recOut as dao.recordset
' Declare all the variables you need for your code'
set db = currentdb()
' recOut will be the table where you want to store your data '
set recIn = db.openRecordset("tblYourOutTable",dbOpenDynaset,dbEditAdd)
' At some point in your code you will need to store data in your table: '
with recOut
.addNew
![A_Field] = value1
![Another_field] = value2
![Yet_another_field] = value3
.update
end with
' Close the recordset and the database objects '
rec.close
db.close
end sub