单个Oracle SQL查询中的奇偶数

单个Oracle SQL查询中的奇偶数,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我想在一次查询中得到奇数和偶数的列表,我只需要找出奇数或偶数中的一个,下面是我的代码 SELECT * FROM ( SELECT T.C_DATE,T.C_NAME,T.C_TIME,L_UID, ROWNUM RANK FROM TENTER T) WHERE MOD(RANK,2)=1 AND C_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE ORDER BY L_UID, C_TIME ASC; 您可以使

我想在一次查询中得到
奇数
偶数
的列表,我只需要找出奇数或偶数中的一个,下面是我的代码

SELECT * FROM 
 ( SELECT T.C_DATE,T.C_NAME,T.C_TIME,L_UID, ROWNUM RANK 
     FROM TENTER T)
    WHERE MOD(RANK,2)=1
      AND C_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE 
    ORDER BY L_UID, C_TIME ASC;
您可以使用:

SELECT decode(mod(TT.RANK,2),0,'Even','Odd') as rank,
       TT.*
  FROM 
 ( SELECT T.C_DATE,T.C_NAME,T.C_TIME,L_UID, 
          ROW_NUMBER() OVER (ORDER BY L_UID, C_TIME ASC) as RANK 
     FROM TENTER T) TT
    WHERE C_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE
    ORDER BY L_UID, C_TIME ASC;

顺便说一句,我建议您使用带有特定订单号的
行数
函数,而不是系统生成的
行数
伪列。

您应该能够在不使用子查询的情况下完成此操作。假设您只需要在每行上添加一个标签:

SELECT T.C_DATE, T.C_NAME, T.C_TIME, L_UID, ROWNUM as RANK,
       (CASE WHEN MOD(ROWNUM, 2) = 0 THEN 'EVEN' ELSE 'ODD' END) as even_odd_label 
FROM TENTER T
WHERE C_DATE BETWEEN :P_FROM_DATE AND :P_TO_DATE 
ORDER BY L_UID, C_TIME ASC;

谢谢你的回复Barbaros Ozhan,但我想要那个列表,不想计数。@Litonbis欢迎,好吧,但你想如何计数。。?关于哪一列…?谢谢,我想按日期列出奇数行数和偶数行数。ORA-01788:此查询块中需要CONNECT By子句从您的查询中删除
MOD(RANK,2)=1
,您将得到奇数和偶数。当您不想要此限制时,为什么在
WHERE
子句中有此条件?除此之外:您是否知道
ROWNUM
是完全任意的,并且在下次运行查询时可能会有所不同?简言之:你真正想要实现的是什么?请显示样本数据和预期结果。请提供样本数据和预期结果。请提供样本输入和输出数据??