質問者
SQLSever2005のクエリー文

質問
すべての返信
-
私の場合 MySQL を基本的に使ってますので group_concat ならすぐ浮かびますが、SQL Server ならどう対応するのだろうと調べてみたら幾つか記事が見つかりました。
Simulating group_concat MySQL function in Microsoft SQL Server 2005?
これらの記事を基にすると以下のようなクエリになりそうです(未検証)
SELECT KMK ,( SELECT sub.COD + ' ' FROM TABLEA sub WHERE sub.KMK = TABLEA.KMK FOR XML PATH('') ) AS name_concat FROM TABLEA GROUP BY KMK
もっともSQL Server は門外漢のため、より優れた回答を頂けると思いますが、一応参考までに上げておきます。
ひらぽん http://d.hatena.ne.jp/hilapon/
- 編集済み ひらぽん 2013年8月9日 7:08 group by が抜けてたので修正
-
普通にPIVOTを使うだけでは無理っぽいので、まず、KMK、COD毎に連番を振る必要がありそうです。
(参考)
列カラムの値をTop行で横展開方法
http://social.msdn.microsoft.com/Forums/ja-JP/89f18f17-3593-4e8c-88cb-ddef1fadb9e1/topでも、ひょっとして、「A ああ いい うう」は、1つの列に格納される文字列なのでしょうか? であれば、XMLを書き出すSQLを応用すれば可能です。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
回答ありがとうございます。
クエリーの結果は、
A ああ いい うう
B ああ
の2行の取得となります。(KMKで集計する為)
SELECT KMK,
MAX(CASE WHEN JUN = 1 THEN COD ELSE '' END) AS COD1,
MAX(CASE WHEN JUN = 2 THEN COD ELSE '' END) AS COD2,
MAX(CASE WHEN JUN = 3 THEN COD ELSE '' END) AS COD3
FROM
(SELECT KMK,COD,ROW_NUMBER() OVER (PARTITION BY KMK ORDER BY JUN)
順位付けし,CASE文で横にして見ました。
これだと、JUNが増えると大変です。