1

「ステータス」整数フィールドを含む重複のあるデータセットがあります。MAX() 集計関数を設定して、特定の値をより低い優先度に「設定」する方法があるかどうか疑問に思っていました。

私が最終的に求めているのは、このデータセットに対してクエリを実行して重複をグループ化し、「6」ではない「最大」ステータス値を持つものを選択することですが、それが値であり、重複がない場合は 6 を返しますこの記録。

MAX を使用するのが最善の方法ですか、それとももっと良い方法がありますか?

4

3 に答える 3

2
select coalesce(max(case when id = 6 then null else id end), max(id))
from (select 6 id union all select 2) a

Dems の改善提案に同意します。@Dems に感謝します

select coalesce(max(nullif(id, 6)), max(id))
from (select 6 id union all select 2) a

「id」が null でない場合、max(id) は 6 に置き換えることができます

于 2012-09-17T13:50:43.523 に答える
0

SQL Serverを使用している場合は、ランク関数を調べることをお勧めします。

http://msdn.microsoft.com/en-us/library/ms176102.aspx

ランクオーバーパーティションを使用して重複を検索する

于 2012-09-17T13:55:49.760 に答える
0
declare @T table
(
  Grp int,
  Val int
)

insert into @T values
(2, 1),
(2, 2),
(2, 6),
(6, 6),
(7, 2),
(7, 6),
(7, 7)

select Val
from 
  (
    select Val,
           row_number() over(partition by Grp 
                             order by case when Val = 6 
                                        then 1 
                                        else 0 
                                      end, Val desc) as rn
    from @T 
  ) as T
where T.rn = 1

結果:

Val
-----------
2
6
7
于 2012-09-17T13:53:10.667 に答える