1

重複の可能性:
MS SQL Server 2005 で group_concat MySQL 関数をシミュレートしていますか?
集計/連結のための SQL クエリ

特定の情報を詰め込むために、SQLサーバーのスタッフ機能を使用しようとしています。次に例を示します。

Money     Age    Gender
860       9          F
860       15         M
860       15         M
860       16         M
860       16         F

次のように 1 つのレコードのみが表示されるように、Age と Gender 列を詰め込みたいと思います。

Money   Age                 Gender
860     9, 15, 15, 16, 16   F, M, M, M, F

年齢と性別の 2 つの 15 と 3 つの M をそれぞれ保持したいと思います。

4

1 に答える 1

1

これは、ものよりも FOR XML を使用する方が簡単です。FORM XML 句をだましてコンマ区切りリスト (CSV) を生成できることに注意してください。

以下の例は、あなたが求めていることを正確に行う必要があります。

CREATE TABLE moneyagegender 
( 
 [Money]  INT, 
 [Age]    INT, 
 [Gender] VARCHAR(2) 
); 

INSERT INTO moneyagegender 
VALUES      (860, 9, 'F'), 
        (860, 15, 'M'), 
        (860, 15, 'M'), 
        (860, 16, 'M'), 
        (860, 16, 'F'); 

SELECT mag.money, 
   (SELECT Substring((SELECT ', ' + CAST(m2.age AS VARCHAR(1024)) 
                      FROM   moneyagegender m2 
                      WHERE  m2.money = mag.money 
                      ORDER  BY m2.age 
                      FOR XML PATH('')), 3, 10000000) AS list) AS ages, 
   (SELECT Substring((SELECT ', ' + m3.gender 
                      FROM   moneyagegender m3 
                      WHERE  m3.money = mag.money 
                      ORDER  BY m3.age 
                      FOR XML PATH('')), 3, 10000000) AS list) AS genders 
FROM   moneyagegender mag 
GROUP  BY mag.money; 

ここに出力があります。

Money       Ages                 Genders
----------- -------------------- -----------------
860         9, 15, 15, 16, 16    F, M, M, M, F
(1 row(s) affected)

これが役立つことを願っています。

詳細が必要な場合は、これについて説明している昨年のブログ投稿があります。 http://stevestedman.com/2011/10/converting-part-of-a-result-set-to-a-comma-separated-list/

于 2012-04-08T17:20:02.687 に答える