我是SQL Server的新手。现在我遇到了这样的查询:
SELECT country FROM Hovercraft.Orders GROUP BY country ORDER BY ASC
order by子句中没有给出列名。这可能吗? SSMS说没有。
约克
答案 0 :(得分:10)
这可能是印刷错误 - 您必须指定您要订购的;这可以是输出中列的列名,表达式或数字。您看到的查询最有可能是后者之一,只是省略了列号1
- 就像这样:
SELECT country FROM Hovercraft.Orders GROUP BY country ORDER BY 1 ASC
- 所以这将按输出第一列的内容排序(即country
)。
答案 1 :(得分:1)
我同意@Mahmoud Gamal。但是,也可以这样编写这样的黑客 -
SELECT o.country, const_column = 1
FROM Hovercraft.Orders o
GROUP BY o.country
ORDER BY const_column ASC
在这种情况下,将执行排序,但不会更改行的顺序。
在MS SQL 2005上:
在MS SQL 2012上:
答案 2 :(得分:0)
这是不可能的!..
Order by子句总是需要列名或列号。
请您回答我为什么要这种情况,我认为您正在使用动态查询,否则请告诉我。
根据SQL标准,这是不可能的。
感谢。