我正在使用这样的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 Quantile1 1
2 2
3 3
不是我所期待的。 我希望该行从右到左而不是从左到右填充,此时我的记录少于10条。这是有道理的,因为通常你喜欢以这种方式分发数据
此问题在社区插件中提到: http://msdn.microsoft.com/en-us/library/ms175126.aspx
你知道怎么摆脱这个吗?
答案 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