在上面的t-sql表中,我非常希望Total行显示在底部。我一直在反对这一点,在我的所有其他查询中只使用ORDER BY Status工作,因为Total在列表中的字母顺序比我们的大多数行值更远。
这不是这种情况,我无法弄清楚如何改变它
我是sql的新手,我甚至在确定如何对谷歌搜索进行短语时遇到了很多困难。到目前为止,我刚刚得到了与Order By相关的结果
答案 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