2

次のように、エイリアシングのある列を選択しています。

select t.name, t.surname from table t where some conditions...;

ここで、特定の列に個別の関数を追加したいと考えています。したがって、エイリアスなしでこれを選択すると、次のようになります。

select distinct(name), surname from table;

しかし、ALIASED 列名を使用して選択クエリを作成したい場合はどうすればよいでしょうか?

select distinct(t.name)機能しませんselect t.distinct(name)

4

3 に答える 3

0

Distinct は関数ではなく、文の句ですselect:

データベースが、選択された重複行の各セットのコピーを 1 つだけ返すようにする場合は、DISTINCT または UNIQUE を指定します。これら 2 つのキーワードは同義です。重複行は、選択リスト内の各式の値が一致する行です。

クエリ内の単一の式 (列) に適用することはできませんdistinct。行全体にのみ適用できます。

結果セットに何を入れたいのかは明確ではありません。name複数のsurname値で同じであることを暗示しています。それぞれを 1 回だけ表示する場合は、どの(および他のフィールド) を表示nameするかを決定する必要があります。surname1 つのオプションは、最小値または最大値をグループ化して選択することです。

select t.name, min(t.surname)
from table t
where ...
group by t.name;

実際のクエリに複数の列がある場合は、分析row_numberまたはdense_rankより適切な場合があるか、keep句があります。それはあなたが何をしようとしているかによって異なります。

または、フィールドのみが必要で、現在まったく表示されていない場合は、次のようにします。namesurname

select distinct t.name
from table t
where ... ;
于 2013-07-31T09:12:37.103 に答える