递归 CTE - 返回奇数和偶数记录

Recursive CTE - Returning odd and even records

非常卡住,希望有人能提供帮助

我需要使用一个通用的 table 表达式首先显示 (select) 所有奇数 Employee_ID 行,然后显示员工的所有偶数 Employee_ID 行table。

这是我到目前为止写的,绝对不正确。如果有人可以提供帮助,那就太好了。

WITH MYCTE (Employee_ID)
AS (
    SELECT 1 AS odd
    FROM Employee

    UNION ALL

    SELECT odd + 1
    FROM Employee
    WHERE odd < 10
    )
SELECT *
FROM MYCTE
ORDER BY CASE 
        WHEN odd % 2 = 1
            THEN 0
        ELSE 1
        END
    ,odd ASC

试试这个

select t.* from
(
Select row_number() over (order by (select 1)) as sno, * From Employee_Table
) as t
order by case when sno%1=1 then 1 else 2 end, sno

您只需要添加一个类似于下面的 ORDER BY

order by case when odd%2 = 1 then 0 else 1 end, odd asc

这是一个示例 SQLFiddle

添加到您的代码中,如下所示:

With MYCTE(Employee_ID)
As 
(
Select 1 as odd
From Employee_Table 

UNION ALL

Select odd + 1
From Employee_Table
)
Select *
From MYCTE
ORDER BY CASE 
             WHEN Employee_ID%2 = 1 
                 THEN 0 
             ELSE 1 
         END, Employee_ID ASC

仔细检查后,我发现您的递归 CTE 构建不正确,这就是您不断收到错误的原因。

我重新编写了您的 CTE,现在它应该可以正常工作了。另请查看 this SQLFiddle 以查看结果。

with mycte (empID, employee_name, reportsTo)
as (
   select 
      employee_id
      , employee_nm
      , reportsTo
    from employee
    where reportsto = 0

    union all

    select
      e.employee_id
      , e.employee_nm
      , e.reportsTo
    from employee e
      inner join mycte mc on e.reportsTo = mc.empID        
  )
select *
from mycte
order by case
            when empID%2 = 1
              then 0
            else 1
          end, empID ASC

为什么要使用 CTE,不需要满足排序条件。

select * from employees
order by (employee_id % 2) DESC, employee_id

nb:这假设 % 用于您的 dbms 中的模数

例如3 % 2 = 1, 4 % 2 = 0

我使用此代码使用递归 CTE 制作了 1 到 99 个奇数的序列

WITH oddnumber AS 
(
  SELECT 1 AS MYNUMBER 
  UNION ALL 
  SELECT 1+(MYNUMBER) FROM ODDNUMBER 
  WHERE MYNUMBER<100 
)
SELECT MYNUMBER 
FROM oddnumber
WHERE MYNUMBER%2=1