如果我有3列,X,Y,Z,每个都是一个数字,我怎样才能让每一行返回最大值到最小值,然后行返回最大值到最小值?MySQL:排序行,然后排列列?
所以,如果我有:
X Y Z
8 7 9
1 2 3
4 6 5
我怎么能拿:
9 8 7
6 5 4
3 2 1
如果我有3列,X,Y,Z,每个都是一个数字,我怎样才能让每一行返回最大值到最小值,然后行返回最大值到最小值?MySQL:排序行,然后排列列?
所以,如果我有:
X Y Z
8 7 9
1 2 3
4 6 5
我怎么能拿:
9 8 7
6 5 4
3 2 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;
突然变得无比轻松。
您可以编写特定数量的列,如John的答案中所述,但您无法轻松地在一般情况下执行此操作。如果这是一个需求,那么我会考虑重新设计模式来支持它。