2012-04-20 12 views
6

Tengo un requisito muy simple.Agregar una fila individual superior al resultado ordenado Conjunto de una consulta

SELECT NULL as ProjectId, 'All' as ProjectName 

UNION 

(
    SELECT Project.ProjectId, Project.ProjectName 
    FROM Project Order by 2 
) 

orden original de las entradas:

ProjectId  ProjectName  
24    Beta   
56    Alpha   
57    Gamma   
120    Aap    

Resultado esperado SET:

ProjectId  ProjectName   
______________________________ 
NULL   All     
120   Aap     
56    Alpha    
24    Beta     
57    Gamma    

lo que necesito: Quiero añadir una sola fila en la parte superior del conjunto de resultados ordenado de una consulta

Problemas:

  1. Subquerys no se les permite tener cláusula ORDER BY
  2. Haciendo Top 100 por ciento destruye el orden, y la fila que tiene 'todos' no viene en la parte superior
  3. Declarar una variable de tabla de insertar todas las entradas en orden y a continuación, realizar la unión en esta tabla es decir

    Select NULL as ProjectId, 'All' as ProjectName... 
        UNION 
    select * from @myTable 
    

    destruye de nuevo el orden

me ayuda por favor

Respuesta

7

Puede ordenar resultado de UNION, pero es necesario para proporcionar columna adicional para identificar dónde vienen los datos - aquí está SortOrder:

SELECT NULL as ProjectId, 'All' as ProjectName, 1 SortOrder 
UNION ALL 
SELECT Project.ProjectId, Project.ProjectName, 2 SortOrder 
FROM Project 
order by SortOrder, ProjectName 

Nota Substituí unión con UNION ALL como usted no es necesario DISTINCT resultado conjunto.

+0

haha..wow..bingo ... muchas gracias –

Cuestiones relacionadas