12

我有一个查询,我必须对 DB2 数据库中的结果进行排序。查询将选择列empname,salary,status。但是我必须使用 empno 的 order 对结果进行排序
但是查询不起作用.. 这是查询。

select empname, salary, status from emp where salary>5000 order by empno  

您可以更新查询以进行排序empno而不在选择列时使用它吗?

4

5 回答 5

10

除了最后的点(。)之外,您的语法对我来说似乎是正确的。删除点后如果不起作用...

尝试类似的东西

SELECT empname, salary, status
  FROM (SELECT   *
            FROM emp
        ORDER BY empno)
 WHERE salary > 5000
于 2012-07-19T05:29:14.433 回答
2

另一种可能更容易的语法,取决于您如何看待它是使用with关键字。这显式地创建了一个具有所需顺序的命名临时表,然后从中进行查询。新查询的顺序将与临时表的顺序相同。

WITH temp_table AS (SELECT   *
            FROM emp
        ORDER BY empno)

SELECT empname, salary, status
  FROM temp_table
 WHERE salary > 5000;

@jaychapani 的答案更简洁,并且在功能上做同样的事情,但是with语法对于很多其他用例来说是强大的,并且在视觉上将两者分开,这可能会很有帮助,特别是如果你有一个长子查询来做其他事情。

于 2019-01-19T19:22:01.817 回答
1

我使用下面的查询来解决这个问题。在这种情况下,我们可以在不显示列的情况下对查询结果进行排序:

WITH temp_table
     AS (select distinct(s1.Name),s1.id
         from students s1
         where marks>75
         order by right(s1.Name ,3) asc,s1.id asc
        )

SELECT Name
  FROM temp_table;
于 2020-09-29T13:00:50.070 回答
0

我不确定,但 DB 上最快的方法是这样的:

SELECT empname, salary, status
FROM (
    select empname, salary, status, empno 
    from emp 
    where salary > 5000 
    order by empno ASC
) 
于 2013-11-22T10:43:44.503 回答
-2

试试这个

select empname, salary, status from emp where salary>5000 order by empno asc

确保列和表名确实存在。

看看:ORDER BY 子句

最好的祝福

于 2012-07-19T05:29:14.440 回答