/ /同じUserIdとは別にカンマでデータを取得する - sql-server、sql-server-2008

同じUserIdと別々のカンマでデータを取得する - sql-server、sql-server-2008

以下のフィールドを持つテーブルがあります。

  • ID = Bigint(PK)
  • USERID = bigint
  • 面積= Varchar(50)

これで、すべてのユーザーはテーブルに3つのエリアを持っています(したがって、異なるエリアを持つUSERidには3つのエントリーがあります)。

ここに画像の説明を入力

以下のように出力する必要があります。

ここに画像の説明を入力

今度はレポートで私は上記のように彼のUserIDによって関連付けられるコンマで区切られたUSERIDそしてすべてのエリアを表示したいです。

私はgroup byで試してみましたが、何の助けも見つかりませんでした。

回答:

回答№1は4

MS-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によるグループ化