0

我正在使用这样的 T-SQL NTILE 函数:

CREATE TABLE #Temp(val int)
GO
INSERT INTO #Temp(val) VALUES(1);
INSERT INTO #Temp(val) VALUES(2);
INSERT INTO #Temp(val) VALUES(3);

 SELECT val, Quantile
 FROM
(
    SELECT val, NTILE(10) OVER (ORDER BY val) AS Quantile
    FROM
    #Temp

) A


GO

DROP TABLE #Temp

不幸的是结果:

val 分位数

1 1

2 2

3 3

不是我所期待的。当我的记录少于 10 条时,我希望从右到左而不是从左到右填充该行。这是有道理的,因为通常您喜欢以这种方式分发数据

这个问题在这里的社区插件中提到:http: //msdn.microsoft.com/en-us/library/ms175126.aspx

你知道如何摆脱这个吗?

4

1 回答 1

0

如果我理解正确,您只需要 NTILE 的行为,而是从高到低填充。(n+1)-NTILE(n)在您的情况下,您可以通过减法和降序来实现这一点;

SELECT val, Quantile FROM
(
    SELECT val, 11-NTILE(10) OVER (ORDER BY val DESC) AS Quantile
    FROM #Temp    
) A

> 1 -  8
> 2 -  9
> 3 - 10

一个用于测试的 SQLfiddle

于 2013-10-10T17:52:24.173 回答