2010-04-23 100 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

相關問題