在ms-access或類似的地方有沒有group_concat函數?在ms-access中是否有一個group_concat函數?
回答
您應該問問自己,您是否需要一個通用解決方案(another is by Allen Browne)或者您是否僅僅爲了目的需要。如果你真的只需要這一次,那就用簡單的方法吧。
在附註中,當連接VBA代碼中的列表時,利用長期訪問專家Trevor Best教給我的一個技巧,那就是將分隔符粘貼到每個值的開頭,然後使用Mid( )將其剝離。取而代之的是你的遍歷子記錄內:
If Len(strOutput) = 0 Then
strOutput = NewValue
Else
strOutput = strOutput & ", " & NewValue
End If
...使用內循環:
strOutput = strOutput & ", " & NewValue
...然後當你退出循環,剝去領先分隔符:
strOutput = Mid(strOutput, 3)
這影響了整個地方,簡化了大量上下文連接的代碼。
編號訪問權限沒有GROUP_CONCAT功能。但是,可以創建一個VBA函數,它可以讓你傳遞一個包含SQL語句的字符串並獲得相應的功能(不是我推薦它,但它是可能的)。
以我個人的Wayback機器,這裏是一些代碼,我回了信,當恐龍統治地球:
Public Function ListQuery(SQL As String _
, Optional ColumnDelimiter As String = " " _
, Optional RowDelimter As String = vbCrLf) As String
'PURPOSE: to return a combined string from the passed query
'ARGS:
' 1. SQL is a valid Select statement
' 2. ColumnDelimiter is the character(s) that separate each column
' 3. RowDelimiter is the character(s) that separate each row
'RETURN VAL:
'DESIGN NOTES:
Const PROCNAME = "ListQuery"
Const MAXROWS = 100
Const MAXCOLS = 10
Dim oConn As ADODB.Connection
Dim oRS As ADODB.Recordset
Dim oField As ADODB.Field
Dim sRow As cString
Dim sResult As cString
On Error GoTo ProcErr
Set sResult = New cString
Set sRow = New cString
Set oConn = GetADOConn()
sResult.Clear
Do Until oRS.EOF
sRow.Clear
For Each oField In oRS.Fields
With sRow
If .Length > 0 Then
.Append ColumnDelimiter
End If
.Append Nz(oField.Value)
End With
Next oField
sRow.Trim
If sRow.Length > 0 Then
With sResult
.Append sRow
.Append RowDelimter
End With
End If
oRS.MoveNext
Loop
oRS.Close
oConn.Close
With sResult
If .Right(Len(RowDelimter)).Value = RowDelimter Then
.Length = .Length - Len(RowDelimter)
End If
End With
FunctionResult:
ListQuery = sResult.Value
CleanUp:
Set sResult = Nothing
Set sRow = Nothing
Set oField = Nothing
Set oRS = Nothing
Set oConn = Nothing
Exit Function
ProcErr:
' logging code...
Resume CleanUp
End Function
的GetADOConn
功能是獲取當前數據庫連接的集中功能。 cString
是一類模仿.NET的StringBuilder
類的行爲,但早在.NET就是TLD和營銷宣傳之外的東西。由於每行都會調用它,因此VBA的內置字符串連接將會很慢,因此需要類似StringBuilder
類。原來的代碼(我已經部分修改過)對可以使用的行數和列數有一個限制,這就是常量的全部內容。
在爲Access編寫代碼時,在DAO中編寫代碼似乎更有意義,因爲除了與SQL Server交互之外,ADO幾乎已經死亡。 – 2010-05-18 23:15:08
@ David-W-Fenton - 嗯,有人可能會說DAO已經死了,但我理解你的觀點。該代碼很容易改變爲DAO。 IIRC,該代碼的日期是在97年的某個時候,所以可能是因爲我當時還在做ASP Classic的東西,所以我在Access中涉及ADO。 – Thomas 2010-05-19 00:50:42
沒有辦法認爲DAO已經死了,因爲它是Access的一個積極開發的組件,在A2007和A2010中對ACE進行修改和改進。它是完全死掉的ADO經典,由ADO.NET取代,它不能在Access中使用(至少現在不是這樣)。 – 2010-05-20 00:50:32
我發現了Duane Hookum(微軟MVP)的this post,聲稱能夠做你想做的。我還沒有測試過它。
順便說一句,如果你有興趣,這是我發現:
首先搜索:group_concat access使我this post與this answer但the link was broken。
然後我在答案試圖鏈接到的內容後再次搜索,發現它:site:http://www.rogersaccesslibrary.com/ concatenate。
有一個訪問功能將多個值到一個值(自定義聚合,我猜。)鏈接是http://www.rogersaccesslibrary.com/Otherdownload.asp?SampleName='Generic%20Function%20To%20Concatenate%20Child%20Records'
但該網站是下來了。如果你google的href,你會發現很多引用和例子。
- 1. 是否有可能有一個函數在另一個函數
- 2. 可能檢查一個數字是否在一個GROUP_CONCAT
- 3. Windows Phone是否有一個_pipe()函數?
- 4. VBScript是否有一個substring()函數?
- 5. 是否有一個numpy max min函數?
- 6. 是否有一個string.isnumeric函數?
- 7. 是否有一個isdate PHP函數?
- 8. PHP是否有一個true()函數?
- 9. 在asp中是否有可能在一個函數中有一個或多個函數?
- 10. 是否有一個本地php函數來查看一個值的數組是否在另一個數組中?
- 11. 在C++庫中是否有一箇中值函數?
- 12. GROUP_CONCAT是一個解析函數,必須由OVER子句
- 13. 是否有可能在php中實例化一個函數?
- 14. 在C++中是否有一個析構函數?
- 15. 是否有可能在group_concat中有不同的+ concat?
- 16. 有沒有一種方法可以檢查一個函數在另一個函數中是否屬實?
- 17. 是否有可能在另一個函數中運行'2-deep'的函數?
- 18. 是否有一個像PHP中的getimagesize一樣的Python函數?
- 19. 是否有一個函數結合了函數kbhit()和getch()?
- 20. Group_concat不是內置函數 - HeidiSQL
- 21. ORDER BY GROUP_CONCAT是否包含某個值?
- 22. 是否有可能測試一個javascript函數是否是一個構造函數?
- 23. DATE_FORMAT一個GROUP_CONCAT
- 24. 是否有可能在C++中有一個函數(-name)作爲模板參數?
- 25. 使用CONCAT及GROUP_CONCAT函數在一個MySQL查詢
- 26. 在laravel中是否有initalSetup()函數?
- 27. 在dlg類中是否有getdocument()函數?
- 28. 當有多個函數時,是否可以在Azure函數應用程序中部署一個函數?
- 29. 是否有一個存在()或包含()函數爲一個數組
- 30. 在Python中是否有一個按數據塊混洗數據的函數?
+1:祝你好運 – 2010-05-17 21:20:58