-1

我的表看起来像这样(简化):

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

我不知道如何对不同列中的值进行排序,同时注意每个值,而不仅仅是最大值或最小值。有谁能够帮我?

提前致谢。

4

2 回答 2

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 
于 2013-08-13T11:08:44.317 回答
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;

我更喜欢这种方法的原因是出于性能原因。使用 across join意味着初始表将仅被扫描一次(而不是使用union all多次扫描表的位置)。对于一个单一的小桌子,这可能没有什么不同。如果“表”确实是一个更复杂的查询,则性能差异可能很大。

于 2013-08-13T11:08:59.410 回答