我的表看起来像这样(简化):
name result1 result2 result3
A 15 17 24
B 30 31 21
C 27 19 39
现在我想在result1,result2和result3列中对结果进行排序,以便我得到按这些列中从最低到最高值排序的排名。
结果应如下所示
name result
A 15
A 17
C 19
B 21
A 24
C 27
B 30
B 31
C 39
我不知道如何在不同的列中对值进行排序,同时注意每个值,而不仅仅是最大值或最小值。有人能帮助我吗?
提前致谢。
答案 0 :(得分:0)
试试这个
SELECT name,result FROM
(
SELECT name, result1 AS result FROM YourTable
UNION ALL
SELECT name, result2 AS result FROM YourTable
UNION ALL
SELECT name, result3 AS result FROM YourTable
) AS T
ORDER BY result
答案 1 :(得分:0)
您需要在排序前取消数据。这是一个好方法:
select name,
(case when n.n = 1 then result1
when n.n = 2 then result2
when n.n = 3 then result3
end) as result
from t cross join
(select 1 as n union all select 2 union all select 3
) n
order by result desc;
我更喜欢这种方法的原因是出于性能原因。使用cross join
表示初始表只扫描一次(而不是使用union all
多次扫描表)。对于单个小型表,这可能没有什么区别。如果“表”实际上是一个更复杂的查询,性能差异可能很大。