从sql server获取数据百分比

时间:2013-11-19 10:48:01

标签: sql-server-2008-r2

我有一个名为类别的表,其中有大约24个类别,每个类别的百分比值如20,10,5。我有另一个表,其中有大约1000万条记录。每条记录都有一个categoryid属于类别表。我需要根据类别表中给出的百分比从第二个表中获取数据。我已经使用游标完成了这项工作,但是当光标扫描每条记录时,它需要大约三分钟才能从第二个表中检索记录。有没有办法使用连接从第二个表中获取记录。请让我知道你的建议。

1 个答案:

答案 0 :(得分:1)

您可以在MSSQL中使用NTILE(100)函数将每个类别中的行分配到100个组。如果每个组至少有100条记录,则以下查询将正常工作:

SQLFiddle demo

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