-
01-07-2019 - |
質問
ちょっとした用事がある場合のアクセスの2007年相当のSQLサーバーの合体機能です。
SQLサーバーなにができるようなもの:
人
John
Steve
Richard
SQL
DECLARE @PersonList nvarchar(1024)
SELECT @PersonList = COALESCE(@PersonList + ',','') + Person
FROM PersonTable
PRINT @PersonList
を生み出す:ジョンスティーブ-リチャード-
いに同一であるが、アクセスの2007年
なんだろうけど、日本人を組み合わせる方法列をこのようなアクセスの2007年か?
解決
ここではサンプルユーザー定義関数(UDF)および可能です。
機能:
Function Coalsce(strSQL As String, strDelim, ParamArray NameList() As Variant)
Dim db As Database
Dim rs As DAO.Recordset
Dim strList As String
Set db = CurrentDb
If strSQL <> "" Then
Set rs = db.OpenRecordset(strSQL)
Do While Not rs.EOF
strList = strList & strDelim & rs.Fields(0)
rs.MoveNext
Loop
strList = Mid(strList, Len(strDelim))
Else
strList = Join(NameList, strDelim)
End If
Coalsce = strList
End Function
使用量:
SELECT documents.MembersOnly,
Coalsce("SELECT FName From Persons WHERE Member=True",":") AS Who,
Coalsce("",":","Mary","Joe","Pat?") AS Others
FROM documents;
ADO版のインスピレーションのコメントonedaywhen
Function ConcatADO(strSQL As String, strColDelim, strRowDelim, ParamArray NameList() As Variant)
Dim rs As New ADODB.Recordset
Dim strList As String
On Error GoTo Proc_Err
If strSQL <> "" Then
rs.Open strSQL, CurrentProject.Connection
strList = rs.GetString(, , strColDelim, strRowDelim)
strList = Mid(strList, 1, Len(strList) - Len(strRowDelim))
Else
strList = Join(NameList, strColDelim)
End If
ConcatADO = strList
Exit Function
Proc_Err:
ConcatADO = "***" & UCase(Err.Description)
End Function
: http://wiki.lessthandot.com/index.php/Concatenate_a_List_into_a_Single_Field_%28Column%29
他のヒント
と思いNzは、構文 Nz(variant, [if null value])
.この文書のリンク: Nz機能
---Person---
John
Steve
Richard
DECLARE @PersonList nvarchar(1024)
SELECT @PersonList = Nz(@PersonList + ',','') + Person
FROM PersonTable
PRINT @PersonList
がNzは同等のものを合体は使用できなくなのでアクセスに操作できます。なに合体するビルにリストの列値をconcatenatiionに変更します。
残念ながらこれができないから内部にアクセスのクエリを単一のSQL文が施設はありません宣言した変数に格納されます。
と思うのを作成する必要があり、機能と開resultset,対して繰り返し処理を実行し、連結列の値を文字列です。
を行アクセス、まるので,それをコードするとどうなるのかわかりません
Public Function Coalesce(pstrTableName As String, pstrFieldName As String)
Dim rst As DAO.Recordset
Dim str As String
Set rst = CurrentDb.OpenRecordset(pstrTableName)
Do While rst.EOF = False
If Len(str) = 0 Then
str = rst(pstrFieldName)
Else
str = str & "," & rst(pstrFieldName)
End If
rst.MoveNext
Loop
Coalesce = str
End Function
しょうを追加したいエラーコードの取り扱いラットフォーム上で時間をrecordset、これに若干の変化がご利用の場合はADOの代わりにDAOが、一般的にアイデアは同じです。
私はここでテーブルを"人"の3つの記録です。あなどについて説明していただけまでのアクセス。
"標準"アクセス(DAO recordsetっているため開recordsetを使用しgetrows方法にてお客様のデータ
Dim rs as DAO.recordset, _
personList as String, _
personArray() as variant
set rs = currentDb.open("Person")
set personArray = rs.getRows(rs.recordcount)
rs.close
一度この配列に含まれておりますbidimensional)で操作で抽出し、"カラム"しょう。がある場合がございますスマートを抽出する方法を一次元に配列からこのくに"参加"の指導を連結各配列値に一つの文字列になります。