我有一个名为类别的表,其中有大约24个类别,每个类别的百分比值如20,10,5。我有另一个表,其中有大约1000万条记录。每条记录都有一个categoryid属于类别表。我需要根据类别表中给出的百分比从第二个表中获取数据。我已经使用游标完成了这项工作,但是当光标扫描每条记录时,它需要大约三分钟才能从第二个表中检索记录。有没有办法使用连接从第二个表中获取记录。请让我知道你的建议。
答案 0 :(得分:1)
您可以在MSSQL中使用NTILE(100)函数将每个类别中的行分配到100个组。如果每个组至少有100条记录,则以下查询将正常工作:
Select T.* from categories
JOIN
( select TData.*,
NTILE(100) OVER
(PARTITION BY TData.CategoryID ORDER BY TData.Id) as Grp
from TData
) as T
on (T.categoryId=categories.id)
AND
(T.Grp<=Categories.PercentOfRecords)
ORDER BY T.CategoryId,T.Id