![](/img/trans.png)
[英]How to copy data in same table with child and MasterID in SQL Server
[英]SQL Server + Select only two records for each masterID in a table
我有一個子表,其中包含1到n條通過MasterID列鏈接到主表的記錄。
如何從子表中為每個MasterID僅選擇前5條記錄?
使用Sql Server CTE和ROW_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
嘗試常規連接,其中約束是一個子查詢,該子查詢從子表中拉出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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.