我正在使用以下查询来检索偶数编号的记录。但是在reslut中它没有显示任何行
select ename,job from emp where mod(rownum,2)=0;
为什么mod(rownum,2)不适用于conditiom
请你也可以给查询选择奇数记录
该查询有什么问题吗?
建议请..
答案 0 :(得分:10)
它无效,因为:第一行ROWNUM
为1
,在这种情况下,MOD(ROWNUM,2)
为1
,因为您的WHERE
声明是MOD(ROWNUM,2)=0
然后这会减少到1=0
并且该行将被丢弃。然后将对ROWNUM
的1进行后续行测试(因为前一行不再在输出中,并且不会有行号),这将再次使测试失败并被丢弃。重复,恶心和所有行都未通过WHERE
测试并被丢弃。
如果您尝试使用WHERE MOD(ROWNUM,2)=1
以这种方式获取奇数行,那么它将仅返回第一行,第二行和后续行将无法通过测试,并且永远不会包含在查询中。
正如Vijaykumar Hadalgi建议的那样,你需要在子查询中选择ROWNUM(它可以在没有where子句的情况下对所有行进行编号以限制它),然后在外部查询中执行测试以限制行: / p>
WITH subquery AS (
SELECT ename,job,ROWNUM AS row_id
FROM Emp
ORDER BY ename
)
SELECT ename, job
FROM subquery
WHERE MOD( row_id, 2 ) = 0;
答案 1 :(得分:3)
-- for selecting rows 1,3,5,7....
SELECT EMPLOYEE_ID,FIRST_NAME, LAST_NAME FROM
(
SELECT DENSE_RANK OVER(ORDER BY EMPLOYEE_ID)AS RANK, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
)
WHERE MOD(RANK,2)=1
-- for selecting rows 2,4,6,8....
SELECT EMPLOYEE_ID,FIRST_NAME, LAST_NAME FROM
(
SELECT DENSE_RANK OVER(ORDER BY EMPLOYEE_ID)AS RANK, EMPLOYEE_ID, FIRST_NAME, LAST_NAME
FROM EMPLOYEES
)
WHERE MOD(RANK,2)=0
答案 2 :(得分:1)
尝试一下
要查找偶数行详细信息,可以使用此代码。 这个人在oracle SQL和MySQL中都很熟练。
select * from (select ename,job, ROWNUM AS rn from emp) where mod(rn, 2) = 0;
要找到 ODD 行详细信息,可以使用此代码。
select * from (select ename,job, ROWNUM AS rn from emp) where mod(rn, 2) <> 0;
答案 3 :(得分:0)
select * from emp where empid in (select decode(mod(rownum,2),0, empid,null) from emp); --Alternate record Even numbered
从表格中获取偶数记录
答案 4 :(得分:0)
或者您可以试试这个:
此处内部查询将获取所有偶数记录主键值,并根据该值获取所有这些记录详细信息。
SELECT * FROM EMP WHERE EMPNO IN
(
SELECT CASE MOD(ROWNUM,2)
WHEN 0 THEN EMPNO
END
FROM EMP
);
这将获取所有奇数记录
SELECT * FROM EMP WHERE EMPNO IN
(
SELECT CASE MOD(ROWNUM,2)
WHEN 1 THEN EMPNO
END
FROM EMP
);
答案 5 :(得分:0)
这可以做到:
memory_order_relaxed
答案 6 :(得分:0)
SELECT empno,ename,slno
FROM ( SELECT empno,ename,ROW_NUMBER() OVER
(ORDER BY empno desc) AS slno FROM emp ) result WHERE mod(slno,2) = 1;
答案 7 :(得分:0)
使用以下查询,
select * from (select ename,job, ROWNUM as row_id from emp) where mod(row_id, 2) = 0;
答案 8 :(得分:0)
Select ename, job from emp where mod(id, 2) =0 ;
如果表具有标识列,则可以尝试id
的{{1}}列int
答案 9 :(得分:-3)
请尝试:
select * from emp where (rowid,0) in (select rowid, mod(rownum,2) from emp)
输出: - 2 4 6
Select * from emp where (rowid,1) in (select rowid, mod(rownum,2) from emp);
输出:1,3,5 ..
或者这将起作用
这个:
奇数:
select * from
(
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber',
FROM table1
) d
where (RowNumber % 2) = 1
甚至:
select * from
(
SELECT col1, col2, ROW_NUMBER() OVER(ORDER BY col1 DESC) AS 'RowNumber',
FROM table1
) d
where (RowNumber % 2) = 0
答案 10 :(得分:-3)
row num表示结果表中不在原始表中的行号。 因此,首先将其分配给row_id或任何变量并使用该变量。