不选择该列,但按该列排序查询结果?

14

我有一个查询,需要对来自DB2数据库的结果进行排序。查询将选择列empname,salary,status。但我必须使用empno进行排序。


但是这个查询无法正常工作... 这是查询语句:

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

你能否更新查询语句,以empno排序,而不使用它作为选取列的一部分?


1
去掉点号然后重试。 - Adam
1
请发布表的创建SQL。 - kirbs
谢谢您的时间。它正在运行。我从多个表中选择,但是empno不明确。现在已更新,正在运行。 - Mr.Chowdary
5个回答

12
你的语法看起来很正确,除了末尾的点号(.)。如果去掉点号仍无法正常工作,可以尝试像这样做:
SELECT empname, salary, status
  FROM (SELECT   *
            FROM emp
        ORDER BY empno)
 WHERE salary > 5000

嗨jaychapani,你的查询不起作用了.. 你能正确更新它吗? - Mr.Chowdary
4
根据IBM的文档,“ORDER BY子句中指定的列不需要包含在SELECT子句中。” - jaychapani
你能否直接发布查询“select * from emp”的结果屏幕截图? - jaychapani
感谢您的时间。它正在运行。我从多个表中进行了选择,但是empno不明确。现在已更新,正在运行。 - Mr.Chowdary
1
@Mr.Chowdary和jaychapani,在子查询中使用ORDER BY不能保证任何结果。表没有顺序,结果集有。 - philipxy
1
这有时可能有效...但您不能依赖它,因为排序不保证正确。 - Sebastiaan van den Broek

2

另一种语法可能更容易,这取决于您的思考方式,就是使用with关键字。这将显式地创建一个具有所需排序的命名临时表,然后从该表中查询。新查询的顺序将与临时表的顺序相同。

原始答案:最初的回答

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

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

@jaychapani的回答更为简洁,功能上与原回答相同。但是with语法在许多其他用例中也非常强大,而且在视觉上将两者分开,这尤其有助于处理包含其他操作的长子查询。"最初的回答"

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;

0

我不确定,但在数据库上最快的方法大概是这样的:

SELECT empname, salary, status
FROM (
    select empname, salary, status, empno 
    from emp 
    where salary > 5000 
    order by empno ASC
) 

-3

试一下这个

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

确保列名和表名真实存在。

请查看:ORDER BY 子句

最好的祝福


点号被移除,我添加了ASC(升序)或使用DESC进行数据的降序排序。 - BizApps
我认为并非所有的SQL服务器都支持在SELECT语句中不指定列名进行ORDER BY排序。 - kpostekk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接