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

时间:2015-08-12 07:51:21

标签: sql common-table-expression

相当困难,并希望有人可以提供帮助

我需要使用公用表表达式首先显示(选择)所有奇怪的Employee_ID行,然后显示employee表中所有偶数Employee_ID行。

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

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

4 个答案:

答案 0 :(得分:1)

您只需添加类似于以下内容的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

答案 1 :(得分:0)

试试这个

xterm

答案 2 :(得分:0)

为什么要使用CTE,不要求它符合排序标准。

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

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

e.g。 3%2 = 1,4%2 = 0

答案 3 :(得分: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