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)
我需要'(全部)'取得结果集的顶部我该怎么做?
两种方式 - 首先是将"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删除重复,是因为这个原因较慢.
| 归档时间: |
|
| 查看次数: |
102 次 |
| 最近记录: |