我在下面的表格中有一些测试数据
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它抛出错误。 感谢
答案 0 :(得分:0)
同样的查询工作正常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