在sql中更改行的位置

时间:2013-08-07 22:40:43

标签: sql sql-server-2008 tsql

enter image description here 在上面的t-sql表中,我非常希望Total行显示在底部。我一直在反对这一点,在我的所有其他查询中只使用ORDER BY Status工作,因为Total在列表中的字母顺序比我们的大多数行值更远。

这不是这种情况,我无法弄清楚如何改变它

我是sql的新手,我甚至在确定如何对谷歌搜索进行短语时遇到了很多困难。到目前为止,我刚刚得到了与Order By相关的结果

4 个答案:

答案 0 :(得分:8)

select查询的结果,除非通过'order by'子句明确指定订单,否则可以任何顺序返回。而且,它们返回的顺序甚至不是确定性的。连续3次运行完全相同的查询可能会以3种不同的顺序返回完全相同的结果集。

因此,如果您想要特定订单到您的表,您需要订购它。像

这样的order by子句
select *
from myTable t
where ...
order by case Status when 'Total' then 1 else 0 end ,
         Status
你能做到吗? 'Total'行将浮动到底部,其他行将按整理顺序排序。您也可以使用这种技术任意订购:

select *
from myTable t
where ...
order by case Status
           when 'Deceased'  then 1
           when 'Total'     then 2
           when 'Active'    then 3
           when 'Withdrawn' then 4
           else                  5
         end

将首先列出状态为“Deceased”的行,然后列出状态为“Total”的行,然后是“Active”和“Withdrawn”,最后列出任何不行的匹配列表中的项目。

答案 1 :(得分:1)

在SQL Server(以及大多数其他数据库)中,您可以使用case对某些statūs进行排序:

order by
        case Status
        when 'Total' then 2
        else 1
        end
,       Status

在MS Access中,您可以使用iif

order by
        iif(Status = 'Total', 2, 1)
,       Status

答案 2 :(得分:1)

ORDER BY CASE WHEN STATUS = 'Total' THEN 'zzz' ELSE STATUS END

答案 3 :(得分:0)

您可以在order by中使用条件表达式:

order by (case when status = 'Total' then 1 else 0 end),
         status