0

我需要帮助来订购我的 SQL Server 2005 结果集。我的查询是

Select RQuery from EPMaster where PName IN ('PFNAME','POName','PFSName');

显示的结果按EPMaster表中存储的顺序排列

在表EPMaster中, PName值的顺序为:

PFName -> 1
PFSName -> 2
POName -> 3

1 最高,3 最低

我需要按使用IN. 这意味着结果应该是形式

PFName -> 1
POName -> 2
PFsName -> 3
4

2 回答 2

2

Select除非您指定子句,否则不保证任何顺序。order by

对于您的特定情况,您可以使用以下内容:

... order by (case when PName = 'PFSName' then 'ZZZZZ' else PName end ) asc

但是您应该知道,这种查询可能会成为性能杀手。

如果您的查询是动态创建的,并且您无法控制给出可能性的顺序,但仍想规定行的顺序相同,您可能不得不求助于以不同的方式构建查询,例如使用:

select 1 as xyzzy, RQuery from EPMaster where PName = 'PFNAME'
union all
select 2 as xyzzy, RQuery from EPMaster where PName = 'POName'
union all
select 3 as xyzzy, RQuery from EPMaster where PName = 'PFSName'
order by 1 asc

如果您的代码构建查询而不是in版本,您可以保证行将按指定的顺序返回,因为xyzzy您添加(和排序依据)的列。

于 2012-09-15T06:44:12.133 回答
0
Select RQuery from EPMaster 
where PName IN ('PFNAME','POName','PFSName')
order by case when PName = 'PFName'  then 0
              when PName = 'POName'  then 1
              when PName = 'PFsName' then 2
              else 999
         end asc

另一种常用的解决方案是将 OrderBy 列添加到 FK 查找表 (Pname)。

于 2012-09-15T06:50:57.160 回答