1

假设我有下表:

Col_A:    Col_B:    Col_C:
Item1     Value1    A
Item2     Value2    B
Item3     Value3    A
Item4     Value4    B
Item5     Value5    A
Item1     Value1    A

现在,我想要取回的是&中的Distinct值,然后排序,所以结果如下所示:Col ACol BCol CCol A

Col_A:    Col_B:
Item1     Value1
Item3     Value3
Item5     Value5
Item2     Value2
Item4     Value4

我打算为此使用的 SQL 是:

 SELECT DISTINCT [Col_A], [Col_B] 
 FROM [MyTable] 
      WHERE ...
 ORDER BY [Col_C] ASC, [Col_A] ASC

但我得到了错误:

ORDER BY items must appear in the select list if SELECT DISTINCT is specified.

我理解为什么会发生错误并认为我可以使用相当复杂的 SQL / CTE 来解决它,但我希望有一种很好、干净和有效的方式来编写 SQL 以获得我正在寻找的结果......

4

3 回答 3

4

col_c你的select条款中没有。distinct您只能按select语句中的列排序。

相反,您应该使用以下group by语句:

select col_a, col_b
from t
group by col_a, col_b
order by max(col_c), col_a

事实上,select distinct在 SQL 中根本没有必要。它是按所有变量分组的语法简写。

于 2013-03-07T19:47:36.570 回答
2

我认为这是现在...

SELECT  [Col_A], [Col_B]
FROM   (SELECT  [Col_A], [Col_B], Min([Col_C]) As bah
        FROM    [MyTable] 
        WHERE   ...
        Group   By [Col_A], [Col_B]) n
ORDER   BY bah ASC, [Col_A] ASC
于 2013-03-07T19:40:33.240 回答
0

选择 col_a, col_b from yourtable Group by col_a, col_ b Order by min(col_c), col_a

抱歉,我错过了订单

于 2013-03-07T19:41:38.527 回答