使用另一个表中的值对SQL表进行排序
我有一个SQL表(tblRequests)与不同用户提交的请求列表。该字段是:使用另一个表中的值对SQL表进行排序
RequestID, UserID, DateSubmitted, Status
我有另一个表(tblImportantUsers)与重要用户的列表。该表只有一个UserID字段。
我想显示重要用户提交的请求在上面。我可以使用以下查询来实现这一点:
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:
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
数据在tblImportantUsers:
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
试试这个,它适用于红移:
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
这是完美的。它正是我想要的,我不需要使用联合。谢谢 –
这应做到:
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
做一个内连接和左外连接
哦,是的,这是我的错误,我实际上使用左连接。 –
@ S.Arzoo,如果这能解决您的问题,请随时接受。 –
其实它没有,当我用左连接运行查询时,它没有显示重要用户在顶部的请求 –
是'status'如果请求是活动还是不什么显示器? –
是的,活动请求有状态1,非活动请求有0 –
样本数据和期望的输出将帮助我们了解您正在尝试做什么 –