【发布时间】:2015-04-20 10:52:29
【问题描述】:
表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
【问题讨论】:
-
哪个 dbms? (这里使用了一些非标准功能......)
-
这是 SQL Server 2008
标签: sql-server sql-server-2008 for-xml-path