sql select query的问题

cha*_*ara 1 sql t-sql sql-server union

我有以下查询

SELECT DISTINCT dr.Revision 
FROM tblActionHeader ah 
    INNER JOIN tblActionType at ON at.ActionTypeID = ah.ActionTypeID 
    INNER JOIN tblDocumentRevisionActionHeader drah ON drah.ActionHeaderID = ah.ActionHeaderID 
    INNER JOIN tblDocumentRevision dr on dr.DocumentRevisionID = drah.DocumentRevisionID 
    INNER JOIN tblDocumentHeader dh on dh.DocumentHeaderID = dr.DocumentHeaderID 
WHERE at.ActionTypeID=2 
UNION SELECT '(All)' 
      FROM tblActionHeader ah
Run Code Online (Sandbox Code Playgroud)

它返回以下结果集

-
(All)
0
0a
1
Run Code Online (Sandbox Code Playgroud)

我需要'(全部)'取得结果集的顶部我该怎么做?

OMG*_*ies 5

两种方式 - 首先是将"All"放在UNION的顶部:

SELECT '(All)' AS revision
UNION ALL
SELECT DISTINCT dr.Revision 
  FROM tblActionHeader ah 
  JOIN tblActionType at ON at.ActionTypeID = ah.ActionTypeID 
  JOIN tblDocumentRevisionActionHeader drah ON drah.ActionHeaderID = ah.ActionHeaderID   
  JOIN tblDocumentRevision dr ON dr.DocumentRevisionID = drah.DocumentRevisionID 
  JOIN tblDocumentHeader dh ON dh.DocumentHeaderID = dr.DocumentHeaderID 
 WHERE at.ActionTypeID = 2 
Run Code Online (Sandbox Code Playgroud)

第二种是通过以下方式为订购分配任意值:

SELECT x.revision
  FROM (SELECT '(All)' AS revision, 1 AS sort_order 
         UNION ALL
        SELECT DISTINCT dr.Revision, 2 AS sort_order 
          FROM tblActionHeader ah 
          JOIN tblActionType at ON at.ActionTypeID = ah.ActionTypeID 
          JOIN tblDocumentRevisionActionHeader drah ON drah.ActionHeaderID = ah.ActionHeaderID   
          JOIN tblDocumentRevision dr ON dr.DocumentRevisionID = drah.DocumentRevisionID 
          JOIN tblDocumentHeader dh ON dh.DocumentHeaderID = dr.DocumentHeaderID 
         WHERE at.ActionTypeID = 2) x
ORDER BY x.sort_order, x.revision
Run Code Online (Sandbox Code Playgroud)

我在这个例子中使用了派生表方法来确保只有revision列在最终结果集中.

使用UNION ALL,如果你知道值将是不同的/独特- UNION删除重复,是因为这个原因较慢.