2010-04-23 3 views

Répondre

2

En utilisant Sql Server CTE et ROW_NUMBER vous pouvez essayer d'utiliser

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

Essayez régulièrement rejoindre où la contrainte est une sous-requête en tirant le TOP 5 de la table des enfants. En pseudocode non testé:

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

maintenant mis à niveau "approxicode un peu testé" – LesterDove

+1

Pour votre information, cela a fonctionné. Je ne trouve pas assez de bonnes réponses pour ne pas défendre celles qui fonctionnent réellement :-) – LesterDove

Questions connexes