如何排序两列(整数和字符串)?

时间:2015-12-30 10:06:41

标签: sql columnsorting

我有一个表,其中第一列是整数,第二列是字符串。我想要的是第一列按顺序排序,然后第二列应该在值相同时将其自身分组。要模拟我的想法,请参阅下文。不确定这是否可能?

排序2列

enter image description here

您会看到正确的顺序应该如下所示,Seq以升序运行,但是当有相同的阶段时,它将在下面选择列表,然后再移动到下一个。因此序列排列正确,但相位分组也正确

[The correct sequence order i want

4 个答案:

答案 0 :(得分:2)

您的要求只能通过此方式解决

SELECT * FROM table ORDER BY column1, column2

您无法理解的事实是,如果column1先排序,那么column2只会按照不违反column1排序的方式进行排序

考虑这张表:

----------------------------------
empid | empname         | salary |
----------------------------------
200   | Johnson         | 10000  |
----------------------------------
400   | Adam            | 12000  |
----------------------------------
300   | Mike            | 11000  |
----------------------------------
100   | Johnson         | 17000  |
----------------------------------
500   | Tomyknoker      | 10000  |
----------------------------------

如果按empidempname排序,则输出如下所示

empid | empname         | salary |
----------------------------------
100   | Johnson         | 17000  |
----------------------------------
200   | Johnson         | 10000  |
----------------------------------
300   | Mike            | 11000  |
----------------------------------
400   |  Adam           | 12000  |
----------------------------------
500   | Tomyknoker      | 10000  |
----------------------------------

所以,首先,empid排序为100, 200, 300, 400, 500

现在empid 100对应Johnson -> 17000200对应Johnson -> 10000,所以一旦empid排序,它会尝试排序{{1} }

明白了吗?

答案 1 :(得分:2)

这可能接近你想要的:

SELECT t1.*
FROM PlanActual AS t1
INNER JOIN (
   SELECT MIN(Seq) AS minSeq, Phase
   FROM PlanActual
   GROUP BY Phase    
) AS t2 ON t1.Phase = t2.Phase
ORDER BY t2.minSeq     

答案 2 :(得分:0)

在两列

之后使用关键字ASCDESC
SELECT * 
FROM table 
  INNER JOIN (
     SELECT phase,max(seq) as k 
     FROM table 
     GROUP BY phase) keytable 
  using (phase) 
ORDER BY k asc, seq asc

修改查询以符合您的需要

答案 3 :(得分:0)

帮助实现排序目标的黑客攻击,也许你可以在表格中添加一个组字段,这样你就可以更清洁地实现你想要的目标。

SELECT * FROM [PlanActual]
ORDER BY Phase, LEFT(Seq,1)