如果我有3列,X,Y,Z,它们都是数字,我怎样才能让每行返回最大,然后行返回最小?
所以,如果我有:
X Y Z
8 7 9
1 2 3
4 6 5
我怎么能得到:
9 8 7
6 5 4
3 2 1
答案 0 :(得分:1)
SELECT CASE WHEN X >= Y && X >= Z THEN X
WHEN Y >= Z && Y >= X THEN Y
ELSE Z END,
CASE WHEN X >= Y && X < Z THEN X
WHEN X >= Z && X < Y THEN X
WHEN Y >= X && Y < Z THEN Y
WHEN Y >= Z && Y < Z THEN Y
ELSE Z END,
CASE WHEN X <= Y && X <= Z THEN X
WHEN Y <= Z && Y <= X THEN Y
ELSE Z
FROM Table
ORDER BY CASE WHEN X >= Y && X >= Z THEN X
WHEN Y >= Z && Y >= X THEN Y
ELSE Z END;
离开我的头顶,这应该工作。我不会对表现做出承诺。如果这是Microsoft SQL,我很想制作第二个表,按顺序存储每行的值,并设置一个触发器以使第二个表保持最新。
现在,如果你有3列,这显然只会起作用。 4列更令人头疼,而这正是您需要开始考虑存储信息的新方法的地方,例如这样的表:
------------------------------
| row_id | column_id | value |
------------------------------
| 1 | 'X' | 7 |
| 1 | 'Y' | 8 |
| 1 | 'Z' | 9 |
| 2 | 'X' | 3 |
......等等。
一旦你获得了这种格式的数据,就做一些:
SELECT row_id, value FROM TABLE ORDER BY row_id, value DESC;
突然变得非常容易。
答案 1 :(得分:0)
您可以编写特定数量的列,如John的答案,但是对于一般情况,您不能轻易地执行此操作。如果这是一个要求,那么我会考虑重新设计架构以支持它。