2017-03-26 7 views
0

複数の列から最低の3つの数値を選択するにはどうすればよいですか?複数の列から最低の値を見つけますか?

例えば
id   num1  num2  num3  num4  num5 
----------- ----------- ----------- ----------- ----------- ----------- 
1   1   6   5   1   2 
2   6   2   2   3   2 
3   2   1   2   1   5 
4   4   1   1   5   7 
5   5   1   4   7   8 

(ID 1から最も低い2つの値)>((ID 5)

+0

私が見る唯一のリモートでの素敵な方法は、それぞれの行をアンピボットことであろう。 –

+0

質問を編集して、必要な結果を表示してください。 –

+0

番号が何であるかを知るだけでいいですか、また、それらが出てきた 'id'行および/または' num'列を知る必要がありますか?また、クエリで重複をどのように処理する必要がありますか?表示されているデータセットから、3つの最も低い数字を1、1、1として表示するか、1、2、3を表示しますか? – Skippy

答えて

1

から最も低い2つの値order by desc行うと

select top 3 num1, num2, num3 
from tbl1 
order by num1 desc, num2 desc, num3 desc 
ように行の topを選択します
3

1つの方法は、cross applyを使用します。

あなたが同じ行、再度ピボットでそれらをしたい場合:

select t.id, v.* 
from t cross apply 
    (select max(case when seqnum = 1 then num end) as num1, 
      max(case when seqnum = 2 then num end) as num2, 
      max(case when seqnum = 3 then num end) as num3     
     from (select num, row_number() over (order by num) as seqnum 
      from (values (num1), (num2), (num3), (num4), (num5)) v(num) 
      ) v 
    ) v; 
+0

@ SqlZimになります。 。 。どうもありがとうございました。 –

関連する問題