在工会声明中使用命令

时间:2013-07-09 07:35:07

标签: database sql-server-2008

我想对union语句的一侧进行排序,如下面的代码所示。但order by只能union语句的一部分是不可能的,当我对view的部分使用order by时,它会让我对整理中的冲突产生一些错误。那么,我如何才能通过union声明的一方订购?

   select Creator
        , CreateDate
        , Subject 
     from tblWkfTicket 
   where tblWkfTicket.ID = @tikectID
union 
   select Creator
        , CreateDate
        , '' AS Subject
     from tblWkfPost 
    where TicketID = @tikectID
 order by tblWkfPost.ID
        ;

2 个答案:

答案 0 :(得分:2)

您必须写一个ORDER BY适用于整个结果集。假设您确实希望第一个查询的结果出现在第二个查询的结果之前,并且第二个查询的结果按ID排序,则需要执行以下操作:

select Creator,CreateDate,Subject
from
  (
   select Creator
       , CreateDate
       , Subject,
       , 1 as resSet
       , 0 as ID 
   from tblWkfTicket 
   where tblWkfTicket.ID = @tikectID
  union all
   select Creator
       , CreateDate
       , '' AS Subject
       , 2
       , ID
   from tblWkfPost 
   where TicketID = @tikectID
  ) t
order by
 resSet,
 ID;

答案 1 :(得分:1)

   select *
     from (
                   select 1    seq
                        , null postid
                        , emb.Creator
                        , emb.CreateDate
                        , emb.Subject
                     from (         
                               select Creator
                                    , CreateDate
                                    , Subject 
                                 from tblWkfTicket 
                                where tblWkfTicket.ID = @tikectID
                          ) emb
               union all
                   select 2    seq
                        , tblWkfPost.IDpostid
                        , Creator
                        , CreateDate
                        , '' AS Subject
                    from tblWkfPost 
                   where TicketID = @tikectID
          )
order by seq
       , postid
;

保证您的订购要求