在Oracle中使用NTILE和动态查询结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Oracle中使用NTILE和动态查询结果相关的知识,希望对你有一定的参考价值。
我在下面有一些测试数据
create table TestTable
(
torque number,
torqueValues number
)
insert into TestTable values(1,10);
insert into TestTable values(1,20);
insert into TestTable values(1,30);
insert into TestTable values(2,1);
insert into TestTable values(3,2);
insert into TestTable values(5,10);
insert into TestTable values(9,1);
insert into TestTable values(9,12);
insert into TestTable values(10,15);
insert into TestTable values(10,10);
我试图在oracle中应用NTILE并将记录集分成多个组。当我在下面运行查询它的工作正常。
select torque,NTILE(2) over(order by torque) from TestTable
但是当我试图将动态值传递给NTILE时,它会丢失表达式错误。下面是查询
select torque,
NTILE(
select count(*)/2 as countvalue from TestTable
over(order by torque) from TestTable
你能指出我弄错了吗?相同的查询工作正常的SQL服务器但oracle它抛出错误。谢谢
答案
相同的查询工作正常的SQL服务器但oracle它抛出错误。
不,它也在SQL Server中出错:Check This
在Oracle中使用with
子句尝试这个,它可以工作。
WITH t
AS (
SELECT count(*) / 2 AS countvalue
FROM TestTable
)
SELECT torque
,NTILE(countvalue) OVER (
PARTITION BY countvalue ORDER BY torque
) as tile
FROM TestTable
CROSS JOIN t;
这里要注意的一点是需要PARTITION BY countvalue
,否则会抛出此错误。
ORA-30488描述:参数应该是PARTITION BY中表达式的函数
我仍然无法从Oracle文档或其他任何地方获得上述限制的适当来源。至于SQL Server,即使这似乎也不起作用:Check this
以上是关于在Oracle中使用NTILE和动态查询结果的主要内容,如果未能解决你的问题,请参考以下文章