T-SQL NTILE记录较少

时间:2013-10-10 17:28:19

标签: tsql

我正在使用这样的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 Quantile

1 1

2 2

3 3

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

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

你知道怎么摆脱这个吗?

1 个答案:

答案 0 :(得分: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

An SQLfiddle to test with