SQL查询以按其他字段选择一个字段顺序

SQL查询以按其他字段选择一个字段顺序,sql,sql-server,sql-order-by,Sql,Sql Server,Sql Order By,我想在select语句中选择一个字段,并使用另一个字段排序,但sql server不允许这样做,因为它说,如果指定select distinct,则order by item必须出现在select语句中 这就是我所尝试的: select DISTINCT format_type from Labels_Add_Label where external_group_id= 2826 order by group_sequence 在此查询中需要进行哪些更改 请提供已更改的查询您可以用这种方式重写

我想在select语句中选择一个字段,并使用另一个字段排序,但sql server不允许这样做,因为它说,如果指定select distinct,则order by item必须出现在select语句中

这就是我所尝试的:

select DISTINCT format_type
from Labels_Add_Label
where external_group_id= 2826
order by group_sequence
在此查询中需要进行哪些更改


请提供已更改的查询

您可以用这种方式重写查询(相当于distinct):

这里不能使用按组顺序排列。可能有多行具有相同的格式\u类型,但组\u序列不同。SQL server不知道应该使用哪一个进行订购

但是,您可以将聚合函数用于GROUP BY查询:

SELECT format_type
FROM Labels_Add_Label
WHERE external_group_id= 2826
GROUP BY format_type;
ORDER BY MIN(group_sequence) ;   -- or MAX(group_sequence)

我回答这个问题是为了测试我的知识,并提供了以下解决方案(在MS SQL Server中使用CTE),如果我错了,请纠正我-使用MS SQL Server上的NORTHWIND数据库(Employees表),我编写了此查询-如果需要,这可能是可以使用的另一个选项

WITH CTE_Employees(FirstName, LastName, BirthDate)
AS
(
    SELECT FirstName, LastName, BirthDate 
    FROM Employees
    WHERE Region IS NOT NULL
)
SELECT FirstName FROM CTE_Employees ORDER BY BirthDate DESC
如上所述,可能有相同的员工名字,但有不同的姓氏,因此SQL Server强加了一个条件,即我们不能将DISTINCT与ORDER BY结合使用

希望这有帮助

选择DISTINCT(或UNION、GROUP BY等)时,只能在ORDER BY中指定选定的列。(例如,format_type=1可以有组_序列1和3,format_type=2可以有组_序列2。也就是说,您不知道format_type 1(带1和3)是在format_type 2(带2)之前还是之后。)
WITH CTE_Employees(FirstName, LastName, BirthDate)
AS
(
    SELECT FirstName, LastName, BirthDate 
    FROM Employees
    WHERE Region IS NOT NULL
)
SELECT FirstName FROM CTE_Employees ORDER BY BirthDate DESC