2

列「A」の行に基づいて列「B」の行を連結しようとしているデータベースのフォーマットの問題があります。そのようです:

https://docs.google.com/spreadsheet/ccc?key=0Am8J-Fv99YModE5Va3hLSFdnU0RibmQwNVFNelJCWHc

写真載せれなくてごめんなさい。まだ名声ポイントが足りません。私は最終的にそれらを取得します

そこで、この問題を Excel や Access で解決したいと考えています。現在はアクセス データベースですが、簡単に Excel にエクスポートできます。ご覧のとおり、列 A で "userid" を見つけたいのですが、"shawn" などの列 A が複数ある場合は、shawn の複数のインスタンスを結合し、プロパティ num を連結したいと考えています。

列 A にはまだ複数のインスタンスがありますが、後でテーブルのすべての一意のインスタンスをフィルター処理することができます。私の懸念は、列 B を "|" で連結する方法です。列 A に複数のインスタンスがある場合は真ん中に。

これは私のデータのほんの一部です (他にもたくさんあります)。ご協力をお願いします。

これまでのところ、私の頭の中の疑似コードは次のとおりです。

If(列Aに複数のインスタンスがある) Then Concatenate(列Bに「#」+「|」+「#」)

グループ化によるアクセスでこれを行う方法があるかどうかも疑問に思っています。

とにかく、助けてください。

4

2 に答える 2

0

これは、SQL GROUP BY 関数で解決できると思います。少なくとも、MySQL または同様の方法で行う方法は次のとおりです。

SELECT userid, GROUP_CONCAT(propertynum SEPARATOR '|') FROM Names GROUP BY userid

このスタック オーバーフローの投稿で説明されているように: MySQL で GROUP BY を使用して文字列を連結するには?

MS Access で SQL を使用する方法に関するリンクは次のとおりです: http://www.igetit.net/newsletters/Y03_10/SQLInAccess.aspx

残念ながら、MSAccess には GROUP_CONCAT 関数はありませんが、この別の SO 投稿では、それを回避するいくつかの方法について説明しています: is there a group_concat function in ms-access?

于 2012-12-22T17:38:00.000 に答える
0

Excel では、vba モジュールのカスタム関数によって簡単に実現できます。うまくいけば、vba(Macros) を使用することは問題ではありません。

これは、vba で追加できる関数のコードです。(Alt+F11 を押すと、ビジュアル エディターに移動し、プロジェクトを右クリックしてモジュールを追加します。以下のコードをモジュールに追加します)

Public Function ConcatenatePipe(ByVal lst As Range, ByVal values As Range, ByVal name As Range) As String
ConcatenatePipe = ""
Dim i As Integer

For i = 1 To lst.Count
    If name.Value = lst.Item(i).Value Then ConcatenatePipe = ConcatenatePipe & "|" & values.Item(i).Value
Next
ConcatenatePipe = Mid(ConcatenatePipe, 2)
End Function

この関数は、例の F 列の Excel で使用できます。以下の式を F2 にコピーし、セルをコピーして F 列の残りの部分に貼り付けます。=ConcatenatePipe($A$2:$A$20,$B$2:$B$20,E2)

于 2012-12-22T17:53:57.753 に答える