2

我有一个数据库,需要一个或多或少简单的选择语句,需要按 4 列排序。我不需要“按字段 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,之后,我们在第一列中有一个数字 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 回答