2

私はデータベースを持っており、4 つの列で並べ替える必要がある多かれ少なかれ単純な select ステートメントが必要です。「フィールド 1、フィールド 2、フィールド 3、フィールド 4 による順序」は必要ありませんが、値がどこにあっても、これら 4 つのフィールドを最低値から最高値に並べ替える必要があります。

たとえば、これに似たデータがある場合

Field1    Field2     Field3      Field4
---------------------------------------
   3         4           6           7
   9         5           4           1
   5         4           8           2
   6         4           4           5

データは次のように並べ替える必要があります。

Field1    Field2     Field3      Field4
---------------------------------------
   9         5           4           1
   5         4           8           2
   3         4           6           7
   6         4           4           5

したがって、1 はフィールド 4 に含まれており、それが最小値であるため、行が最初に表示されます。列 4 にもある数値 2 についても同様です。その後、列 1 に数値 3 があるため、行が次に移動します。最後の行は列 2 と列 3 の 4 番です。問題をうまく説明できたかどうかわかりません。さらに説明が必要な場合はお知らせください。

mssql を使用して直接これを行う方法はありますか、または実際のコードでデータテーブルを並べ替える必要がありますか?

4

2 に答える 2

3
with data as (
    select *
    from (
    values (   3         ,4           ,6           ,7),
       (9         ,5           ,4           ,1),
       (5         ,4           ,8           ,2),
       (6         ,4           ,4           ,5)
    ) t (Field1    ,Field2     ,Field3      ,Field4)
)
select * from data
order by (case when Field1 < Field2 and Field1 < Field3 and Field1 < Field4 then Field1
                when Field2 < Field1 and Field2 < Field3 and Field1 < Field4 then Field2
                when Field3 < Field1 and Field3 < Field2 and Field1 < Field4 then Field3
                else Field4 end)

また、より拡張可能な方法:

with data as (
    select *
    from (
    values (   3         ,4           ,6           ,7),
       (9         ,5           ,4           ,1),
       (5         ,4           ,8           ,2),
       (6         ,4           ,4           ,5)
    ) t (Field1    ,Field2     ,Field3      ,Field4)
)
select d.*
from data d
order by (select min(Field) 
          from (values (Field1), (Field2), (Field3), (Field4)) t(Field))
于 2013-04-26T07:04:11.350 に答える
2

以下を使用できます。

SELECT *,
  CASE WHEN Field1 < Field2 AND Field1 < Field3 AND Field1 < Field4 THEN Field1
       WHEN Field2 < Field1 AND Field2 < Field3 AND Field2 < Field4 THEN Field2
       WHEN Field3 < Field1 AND Field3 < Field2 AND Field3 < Field4 THEN Field3
       ELSE Field4 END
       as SORTFIELD
from table
ORDER BY SORTFIELD
于 2013-04-26T07:02:47.720 に答える