相当困难,并希望有人可以提供帮助
我需要使用公用表表达式首先显示(选择)所有奇怪的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
答案 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