2

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

4

2 に答える 2