2010-04-23 86 views

回答

2

使用SQL Server CTEROW_NUMBER你可以尝试使用

DECLARE @ParentTable TABLE(
     ID INT 
) 

INSERT INTO @ParentTable SELECT 1 
INSERT INTO @ParentTable SELECT 2 
INSERT INTO @ParentTable SELECT 3 

DECLARE @ChildTable TABLE(
     ID INT, 
     ParentID INT 
) 

INSERT INTO @ChildTable SELECT 1, 1 
INSERT INTO @ChildTable SELECT 2, 1 
INSERT INTO @ChildTable SELECT 3, 1 
INSERT INTO @ChildTable SELECT 4, 1 
INSERT INTO @ChildTable SELECT 5, 1 
INSERT INTO @ChildTable SELECT 6, 1 
INSERT INTO @ChildTable SELECT 7, 1 

INSERT INTO @ChildTable SELECT 8, 2 
INSERT INTO @ChildTable SELECT 9, 2 

INSERT INTO @ChildTable SELECT 10, 3 
INSERT INTO @ChildTable SELECT 11, 3 

;WITH RowNums AS(
     SELECT pt.ID ParentID, 
       ct.ID ChildID, 
       ROW_NUMBER() OVER (PARTITION BY pt.ID ORDER BY ct.ID) RowNum 
     FROM @ParentTable pt INNER JOIN 
       @ChildTable ct ON pt.ID = ct.ParentID 
) 
SELECT ParentID, 
     ChildID 
FROM RowNums 
WHERE RowNum <= 5 
2

尝试常规连接,其中约束是一个子查询子表拉动TOP 5。在未经测试的伪代码:

SELECT A.MasterID, B.* 
FROM MasterTable A 
JOIN ChildTable B 
ON A.MasterID = B.MasterID 
AND B.ChildID IN (SELECT Top 5 ChildID FROM ChildTable 
    WHERE MasterID = A.MasterID ORDER BY Whatever) 
+0

现在升级到“有点测试approxicode” – LesterDove 2010-04-23 04:10:29

+1

FYI,这工作。我没有提出足够好的答案,不主张实际工作的人:-) – LesterDove 2010-04-23 04:16:25

相关问题