表Master
:
----------------------
| Name | ID |
----------------------
| A | 1 |
| B | 2 |
| C | 3 |
----------------------
表Detail
:
----------------------
| masterID | det |
----------------------
| 1 | 21 |
| 1 | 31 |
| 1 | 442 |
| 1 | 76 |
| 2 | 1 |
| 2 | 90 |
| 3 | 48 |
| 3 | 56 |
| 3 | 109 |
----------------------
要求された結果: 結合と連結を行いますが、連結値の数を X (ここでは 2) に制限し、それ以上の場合は新しい行を作成します。たとえば、上記の期待される結果は次のようになります。
----------------------
| Name | dets |
----------------------
| A | 21, 31 |
| A | 442, 76|
| B | 1, 90 |
| C | 48, 56 |
| C | 109 |
----------------------
以下のコードを使用すると、連結されたすべての結果を取得できますが、連結されるレコードの数を制限する方法について助けが必要です:
SELECT Master.Name,
STUFF((
SELECT ','+Detail.det
FROM Detail
WHERE Master.ID = Detail.masterID
FOR XML PATH(''),TYPE).value('(./text())[1]','VARCHAR(MAX)')
,1,2,'')
FROM Master
そのためのSQLFiddleも作成しました:http://sqlfiddle.com/#!6/a1b69/1/0