最高百分比的Round vs Truncate

时间:2014-04-23 18:46:42

标签: sql-server-2008 percentile

我想知道是否有办法在执行前x%时将截断变为圆形。

例如:

Select Top 10 Percent
    HospMastID
        ,ClientID
    ,ControlGroup = 1
    Into
    #RandomTable
    From
    #ClientsTable
    Order By
    NewID()

目前,当我总共有1176个原始记录时,它返回117作为前10%。只是好奇改变它的设置是什么。因为它实际上是截断原始数字而不是舍入它。

谢谢, 斯科特

1 个答案:

答案 0 :(得分:1)

如果您想ROUND结果,您可以计算自己在TOP中使用的值(已授予,这意味着您需要先计算表格的行数,但它是唯一的我可以想到这样做的方式,因为没有这个设置):

DECLARE @TopPercent INT, @Top INT
SET @TopPercent = 10 -- use the value you want here

SELECT @Top = ROUND(COUNT(*)*CAST(@TopPercent AS DECIMAL(4,1))/100,0)
FROM #ClientsTable

SELECT TOP(@Top) 
        HospMastID,
        ClientID,
        ControlGroup = 1
INTO #RandomTable
FROM #ClientsTable
ORDER BY NEWID()