Ver Mensaje Individual
  #4 (permalink)  
Antiguo 18/02/2008, 15:37
Avatar de Beakdan
Beakdan
 
Fecha de Ingreso: diciembre-2001
Ubicación: Monterrey, Nuevo León
Mensajes: 433
Antigüedad: 23 años
Puntos: 7
Re: ordenar una misma columna una consulta

El problema es que en tu consulta no hay un elemento que relacione una columna con la otra. La relación que buscas es la posición ordinal ¿no?. Entonces, esto se soluciona encontrando la posición ordinal para ambos resultados y usar este valor como Id para vincularlos.
Con SQL Server 2000, lo solucionas usando tablas de paso. Como el juego de resultados es reducidísimo, lo mejor es usar variables de tabla:
Código:
--Tablas que contendrán los resultados. Las columnas
--IDENTITY se usaran para vincular ambos
DECLARE @topDesc TABLE(Id SMALLINT IDENTITY(1,1), CategoryID int)
DECLARE @topAsc TABLE(Id SMALLINT IDENTITY(1,1), CategoryID int)
--Obtener valores ascendentes
INSERT INTO @topAsc(CategoryID)
SELECT      TOP 5 CategoryID 
FROM        products
ORDER BY    num ASC
--Obtener valores descendentes
INSERT INTO @topDesc(CategoryID)
SELECT TOP 5 CategoryID 
FROM        products
ORDER BY    num DESC
--Vincular ambos resultados
SELECT      a.CategoryID AS CategoryIdAsc, d.CategoryID AS CategoryIdDesc
FROM        @topAsc AS a
INNER JOIN  @topDesc AS d
         ON a.Id = d.Id 
Con SQL Server 2005 es más fácil:
Código:
SELECT      a.CategoryID AS CategoryIdAsc, d.CategoryID AS CategoryIdDesc
FROM        (
            SELECT  TOP 5 CategoryID,
                    ROW_NUMBER() OVER(ORDER BY CategoryID ASC) AS Id
            FROM    products
        ) AS a
INNER JOIN  (
            SELECT  TOP 5 CategoryID,
                    ROW_NUMBER() OVER(ORDER BY CategoryID DESC) AS Id
            FROM    products
        ) AS d
        ON a.Id = d.Id 

Última edición por Beakdan; 18/02/2008 a las 15:47