以下のフィールドを持つテーブルがあります。
- ID = Bigint(PK)
- USERID = bigint
- 面積= Varchar(50)
これで、すべてのユーザーはテーブルに3つのエリアを持っています(したがって、異なるエリアを持つUSERidには3つのエントリーがあります)。
以下のように出力する必要があります。
今度はレポートで私は上記のように彼のUserIDによって関連付けられるコンマで区切られたUSERIDそしてすべてのエリアを表示したいです。
私はgroup byで試してみましたが、何の助けも見つかりませんでした。
回答:
回答№1は4MS-SQL Server 2008では、次のXMLハックを使用できます。
SELECT DISTINCT t.USERID, REPLACE((
SELECT Area AS "data()"
FROM table1 a
WHERE a.USERID = t.USERID
FOR XML path("")
), " ", ", ") AS Areas
FROM table1 t
もう少し良い使用することです STUFF
の代わりに REPLACE
SELECT DISTINCT t.USERID, STUFF((
SELECT Area AS "data()"
FROM table1 a
WHERE a.USERID = t.USERID
FOR XML path("")
) , 1, 1, "") AS Areas
FROM table1 t
あなたがこれを使用する必要があるところにたくさんの機能があり、パフォーマンスの問題があるならば、あなたはよりよく見ることを持っています SQL Server用のGROUP_CONCAT文字列集計。 これはT_SQL関数です。CodePlexからダウンロードできます。 ここに.
回答№2の場合は0
MySQLの場合は、結果をグループ分けすることができます。 USERID
そしてそれから GROUP_CONCAT
すべてを連結する Area
グループで。このようなもの:
SELECT USERID, GROUP_CONCAT(Area) FROM table1 GROUP BY USERID;
SQL Serverの場合は、ご覧になることをお勧めします。 SQL ServerでGROUP_CONCAT MySQL関数をシミュレートする?
回答№3の場合は0
ユーザーIDを選択し、領域=(SELECT領域+ "、" #table1 A1より A.UserID = A1.UserIDです。 FOR XML PATH( "")
) #table1 Aより A.UserIDによるグループ化