0

SQLServer2005の結果セットを注文する際にサポートが必要です。クエリは

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

コードがバージョンではなくこのクエリを作成する場合は、追加する(および並べ替える)列があるため、指定された順序で行が返されることを保証できます。inxyzzy

于 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 に答える