在上面的 t-sql 表中,我非常希望 Total 行出现在底部。我一直在为此苦恼,在我所有其他查询中,只需使用 ORDER BY Status 即可,因为 Total 按字母顺序排列在列表中比我们的大多数行值更远。
这不是这里的情况,我只是不知道如何改变它
我对 sql 还很陌生,甚至在确定如何使用 google 搜索时也遇到了很多困难。到目前为止,我刚刚得到了有关 Order By 的结果
在上面的 t-sql 表中,我非常希望 Total 行出现在底部。我一直在为此苦恼,在我所有其他查询中,只需使用 ORDER BY Status 即可,因为 Total 按字母顺序排列在列表中比我们的大多数行值更远。
这不是这里的情况,我只是不知道如何改变它
我对 sql 还很陌生,甚至在确定如何使用 google 搜索时也遇到了很多困难。到目前为止,我刚刚得到了有关 Order By 的结果
查询的结果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
将首先列出状态为“已故”的行,然后是状态为“总计”的行,然后是“活动”和“撤回”,最后是任何不匹配的行列表中的一个项目。
在 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
ORDER BY CASE WHEN STATUS = 'Total' THEN 'zzz' ELSE STATUS END
您可以在中使用条件表达式order by
:
order by (case when status = 'Total' then 1 else 0 end),
status