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からの値であり、 thenによって並べ替えられているため、結果は次のようになります。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 distinctSQLではまったく必要ありません。これは、すべての変数でグループ化するための構文上の省略形です。

于 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 を選択 col_a、col_ b でグループ化 min(col_c)、col_a で並べ替え

申し訳ありませんが、注文を逃しました

于 2013-03-07T19:41:38.527 に答える