ホームページ > データベース > mysql チュートリアル > カスタム関数を使用して MS Access クエリの行を連結する方法

カスタム関数を使用して MS Access クエリの行を連結する方法

Barbara Streisand
リリース: 2025-01-07 21:33:42
オリジナル
293 人が閲覧しました

How to Concatenate Rows in MS Access Queries Using a Custom Function?

MS Access クエリでカスタム関数を使用して行を結合する

紹介:

Microsoft Access では、カスタム関数を使用して、複数のデータ行を 1 つの行に結合できます。この手法は、共通フィールドに基づいてデータを要約する必要がある場合に特に役立ちます。

質問:

MS Access に次のデータを含むテーブルがあるとします。

ColumnA ColumnB
1 abc
1 pqr
1 xyz
2 efg
2 hij
3 asd

あなたの目標は、最初の列 (ColumnA) の一意の行ごとに、2 番目の列 (ColumnB) の値を 1 つの行に結合することです。望ましい出力は次のとおりです:

ColumnA ColumnB
1 abc, pqr, xyz
2 efg, hij
3 asd

カスタム関数ソリューション:

これを行うには、Access で結合を実行するカスタム関数を定義します。ステップバイステップのガイドは次のとおりです:

  1. ナビゲーション ウィンドウで [モジュール] ノードを右クリックし、[新しいモジュール] を選択して、Access データベースに新しいモジュールを作成します。
  2. モジュールに次のコードを入力します:
<code class="language-vba">Public Function GetList(strSQL As String, Optional strDelimiter As String = ", ", Optional strValueList As String = "")
    Dim rs As DAO.Recordset
    Set rs = CurrentDb.OpenRecordset(strSQL)
    Do While Not rs.EOF
        strValueList = strValueList & rs(0) & strDelimiter
        rs.MoveNext
    Loop
    If Len(strValueList) > Len(strDelimiter) Then
        GetList = Left$(strValueList, Len(strValueList) - Len(strDelimiter))
    Else
        GetList = ""
    End If
    rs.Close
    Set rs = Nothing
End Function</code>
ログイン後にコピー
  1. この関数は 3 つのパラメータを受け入れます:

    • strSQL: 接続するデータの SQL 文を取得します。
    • strDelimiter (オプション): 連結された値を区切るために使用される区切り文字。デフォルトはカンマとスペースです。
    • strValueList (オプション): 接続を開始するために使用される初期値リスト。デフォルトは空の文字列です。
  2. クエリでカスタム関数を使用して値を連結できるようになりました。次の SQL ステートメントをクエリに入力します:

<code class="language-sql">SELECT ColumnA, GetList("SELECT ColumnB FROM Table1 WHERE ColumnA = " & [ColumnA]) AS ConcatenatedValues
FROM Table1
GROUP BY ColumnA;</code>
ログイン後にコピー
  1. このクエリは行を ColumnA ごとにグループ化し、GetList() 関数を使用して各グループの ColumnB の値を連結します。

  2. クエリの出力は、目的の結果を含むテーブルになります:

ColumnA ConcatenatedValues
1 abc, pqr, xyz
2 efg, hij
3 asd

この改訂された回答では、次のように VBA コードが改善されています。

  • オプションのパラメータにデフォルト値を追加する: これにより、関数がよりユーザーフレンドリーで使いやすくなります。 読みやすくするために、区切り文字がデフォルトの「,」(カンマとスペース)になりました。
  • 空の結果セットの処理: If Len(strValueList) > Len(strDelimiter) Then ブロックは、SQL クエリが行を返さない場合に、関数が末尾の区切り文字の代わりに空の文字列を返すようにします。
  • レコードセットを明示的に閉じて Nothing に設定する: これは、リソースを解放し、メモリ リークの可能性を防ぐための良い方法です。

これにより、関数がより堅牢かつ効率的になります。 この例の SQL クエリも、わかりやすくするために若干簡略化されています。

以上がカスタム関数を使用して MS Access クエリの行を連結する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート