シンプルに見えてひどい SQL ステートメントがあります。そのユーザーのメールアドレスが会社のテーブルにある場合、特定のユーザーが結果セットの最初の行になるように、SQL が順序付けられたユーザーデータを含む結果セットを返すようにします。
欲しいものを返すこのSQLがありますが、見た目がひどいと思います:
select 1 as o, *
from Users u
where companyid = 1
and email = (select email from companies where id=1)
union
select 2 as o, *
from Users u
where companyid = 1
and email <> (select email from companies where id=1)
order by o
ちなみに、ユーザーテーブルのメールアドレスは多くの会社にある可能性があるため、メールアドレスに結合することはできません:-(
その声明を改善する方法はありますか?
Microsoft SQL Server 2000 を使用しています。
編集:私はこれを使用しています:
select *, case when u.email=(select email from companies where Id=1) then 1 else 2 end AS SortMeFirst
from Users u
where u.companyId=1
order by SortMeFirst
私よりずっとエレガントです。ありがとうリチャードL!