我有一个数据库,需要一个或多或少简单的select语句,需要按4列排序。我不需要“按字段1,字段2,字段3,字段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中,这是最低值,因此该行首先出现,同样适用于数字2,这也是第4列,之后,我们在第1列中有一个数字3行进入下一行,最后一行是第2列和第3列中的第4行。我不确定我是否解释了这个问题,所以如果需要进一步解释,请告诉我。
有没有办法直接使用mssql执行此操作,还是需要在实际代码中对datatable进行排序?
答案 0 :(得分: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))
答案 1 :(得分: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