SQL Query通过其他字段选择一个字段顺序

时间:2015-12-03 07:37:17

标签: sql sql-server sql-order-by

我想在select语句中选择一个字段,并使用另一个字段排序,但是sql server不允许这样做,因为如果指定了select distinct,则逐项显示必须出现在select语句中。

这就是我的尝试:

select DISTINCT format_type
from Labels_Add_Label
where external_group_id= 2826
order by group_sequence

此查询需要进行哪些更改?

请提供更改后的查询

2 个答案:

答案 0 :(得分:3)

您可以通过这种方式重写查询(相当于不同):

SELECT format_type
FROM Labels_Add_Label
WHERE external_group_id= 2826
GROUP BY format_type;

并且您无法在此处使用ORDER BY group_sequence。可能有多个行具有相同的format_type但不同的group_sequence。 SQL服务器不知道应该使用哪一个进行排序。

但是,您可以将聚合函数与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)

答案 1 :(得分:0)

我刚刚接受了这个问题以测试我的知识,并提供了以下解决方案(在MS SQL Server中使用CTE),如果我错了请纠正我 - 在MS SQL上使用NORTHWIND数据库(员工表)服务器,我写了这个查询 - 这可能是另一个可以使用的选项,如果有需要的话!

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

如上所述,可以有一个相同的Employee FirstName但具有不同的LastName,因此SQL Server强加了一个条件,我们不能将DISTINCT与ORDER BY结合使用...

希望这有帮助!