2011-11-29 4 views
1

я следующий запроспроблема с SQL SELECT запрос

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 

он возвращает следующий результирующий набор

- 
(All) 
0 
0a 
1 

мне нужно «(All)» взять в верхней части результирующего набора, как я могу сделать это?

+0

Использовать заказ по предложению? – Bert

ответ

5

два пути - первый будет ставить «все» в верхней части 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 

Второй должен присвоить произвольное значение для заказ:

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 

Я использовал основанный на таблицах в этом примере, чтобы убедиться, что в окончательном наборе результатов находится только столбец revision.

Используйте UNION ALL, если вы знаете, что значения будут отличаться/уникальны - UNION удаляет дубликаты, и по этой причине медленнее.

0

Не уверен, что вы ищете это?

select top 1 as All from 
(
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 
) 
3

Попробуйте

SELECT '(All)' from tblActionHeader ah 
union all 
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 
1
SELECT Revision 
FROM( 
    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)' AS Revision 
    ) tempT 
ORDER BY Revision DESC