2016-03-25 7 views
2

私はSQLテーブル(tblRequests)に異なるユーザからのリクエストのリストを持っています。フィールドは次のとおりです。SQLテーブルを別のテーブルの値でソートする

RequestID, UserID, DateSubmitted, Status 

重要なユーザーのリストを持つ別のテーブル(tblImportantUsers)があります。このテーブルにはUserIDのフィールドが1つしかありません。

重要なユーザーから送信されたリクエストを一番上に表示したいと考えています。

select r.RequestID, r.UserID, r.DateSubmitted, r.Status 
from tblRequests r left join tblImportantUsers u on r.UserID = u.UserID 
order by u.UserID desc, r.DateSubmitted desc 

ただし、私は重要なユーザーのアクティブなリクエストを上に表示したいだけです。非アクティブな要求は、DateSubmittedフィールドに従ってソートする必要があります。私もUNIONメソッドを試しましたが、どちらもうまくいきません。

リクエストテーブルに余分な列を追加することなくこれを達成できる方法はありますか? tblRequestsで

おかげ

データ:tblImportantUsersで

RequestID UserID DateSubmitted Status 
1   205  3/12/2016  0 
2   208  3/16/2016  1 
3   203  3/17/2016  0 
4   241  3/17/2016  1 
5   210  3/18/2016  0 
6   205  3/18/2016  1 
7   203  3/19/2016  1 
8   241  3/19/2016  1 

データ:

UserID 
205 
203 

必要な結果:

RequestID UserID DateSubmitted Status 
7   203  3/19/2016  1 
6   205  3/18/2016  1 
8   241  3/19/2016  1 
5   210  3/18/2016  0 
4   241  3/17/2016  1 
3   203  3/17/2016  0 
2   208  3/16/2016  1 
1   205  3/12/2016  0 
+0

は、要求がアクティブであるかどう監視何status' 'ですか? –

+0

はい、アクティブなリクエストはステータス1、非アクティブなリクエストは0 –

+0

のサンプルデータを持っています。希望の出力は、あなたが何をしようとしているのかを理解するのに役立ちます –

答えて

1

これを試してみてくださいに参加し、それが赤方偏移に動作します:

select 
     a.requestid 
    , a.userid 
    , a.datesubmitted 
    , a.status 
    from 
    tblrequests a 
    left join tblimportantusers b on (a.userid = b.userid) 
    order by 
    (case when status = 1 and b.userid is not null then 1 else 0 end) desc 
    , date submitted desc 
    , userid desc 
+0

これは完璧です。それはまさに私が望んでいたものであり、私は組合を使う必要はありません。ありがとう –

0

これはそれを行う必要があります:

インナーを行う
select RequestID, UserID, DateSubmitted, Status 
from (
select r.RequestID, r.UserID, r.DateSubmitted, r.Status, 1 as ind 
from tblRequests r inner join tblImportantUsers u on r.UserID = u.UserID 
order by r.status desc, r.DateSubmitted desc 

union all 

select r.RequestID, r.UserID, r.DateSubmitted, r.Status, 0 as ind 
from tblRequests r left outer join tblImportantUsers u on r.UserID = u.UserID 
where u.UserID is null 
order by r.status desc, r.DateSubmitted desc) 

order by ind desc, DateSubmitted desc, userID 

が参加し、左OUTERが

+0

ああ、それは私の間違いです。 –

+0

@ S.Arzoo、これがあなたの問題を解決するならば、受け入れてください。 –

+0

実際には、左結合でクエリを実行すると、重要なユーザーの要求が上部に表示されません –

関連する問題