0

在此处输入图像描述 在上面的 t-sql 表中,我非常希望 Total 行出现在底部。我一直在为此苦恼,在我所有其他查询中,只需使用 ORDER BY Status 即可,因为 Total 按字母顺序排列在列表中比我们的大多数行值更远。

这不是这里的情况,我只是不知道如何改变它

我对 sql 还很陌生,甚至在确定如何使用 google 搜索时也遇到了很多困难。到目前为止,我刚刚得到了有关 Order By 的结果

4

4 回答 4

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

会做你。“总计”行将浮动到底部,其他行将按整理顺序排序。您还可以使用此技术任意订购东西:

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

将首先列出状态为“已故”的行,然后是状态为“总计”的行,然后是“活动”和“撤回”,最后是任何不匹配的行列表中的一个项目。

于 2013-08-07T22:51:52.507 回答
1

在 SQL Server(和大多数其他数据库)中,您可以使用case将某些状态排序其他之上:

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

在 MS Access 中,您可以使用iif

order by
        iif(Status = 'Total', 2, 1)
,       Status
于 2013-08-07T22:42:08.183 回答
1
ORDER BY CASE WHEN STATUS = 'Total' THEN 'zzz' ELSE STATUS END
于 2013-08-07T22:42:52.443 回答
0

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

order by (case when status = 'Total' then 1 else 0 end),
         status
于 2013-08-07T22:41:56.220 回答