我有一个表,其中第一列是整数,第二列是字符串。我想要的是第一列按顺序排序,然后第二列应该在值相同时将其自身分组。要模拟我的想法,请参阅下文。不确定这是否可能?
排序2列
您会看到正确的顺序应该如下所示,Seq以升序运行,但是当有相同的阶段时,它将在下面选择列表,然后再移动到下一个。因此序列排列正确,但相位分组也正确
[
答案 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 |
----------------------------------
如果按empid
和empname
排序,则输出如下所示
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 -> 17000
而200
对应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)
在两列
之后使用关键字ASC
或DESC
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)