none
Consultas: Top 10 Ascendente Y Descendente Simultáneo RRS feed

  • Pregunta

  • SQL Server 2008 | 2012

    Hola a todos

    Es necesario recuperar los Primeros 10 Registros y los Últimos 10 Registros de una Tabla y mostrar los resultados a través de una sola Consulta.

    1º ¿Cómo realizar esta operación?

    2º ¿Se puede utilizar el Operador UNION para SubConsultas de una misma Tabla?

    Desde ya Muchísimas Gracias


    Skar.2007

    lunes, 9 de octubre de 2017 18:13

Respuestas

  • ¿Se puede utilizar el operador UNION para SubConsultas de una misma Tabla?

    Claro, ¿por qué no?

    SELECT * FROM dbo.TableName WHERE Id IN (1, 2, 3)
    UNION ALL
    SELECT * FROM dbo.TableName WHERE Id IN (4, 5, 6) ORDER BY ID
    GO

    Para resolver el caso que presentas requieres escribir dos consultas y ordenarlas de manera ascendente/descendente para tomar las diez primeras filas y unirlas mediante el operador UNION, sin embargo no es posible ordenar las subconsultas que participan en la unión sino hasta después de haberse formado el conjunto resultante. Una salida al problema es recuperar las filas en una tabla derivada y los resultados -de la consulta externa- unirlos mediante el operador UNION, por ejemplo:

    SELECT t1.id, t1.Col1 FROM 
        (SELECT TOP(10) id, Col1 FROM dbo.TableName ORDER BY id ASC) t1
    UNION ALL 
    SELECT t2.id, t2.Col1 FROM 
        (SELECT TOP(10) id, Col1 FROM dbo.TableName ORDER BY id DESC) t2
    ORDER BY id;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Skar.2007 martes, 10 de octubre de 2017 4:25
    martes, 10 de octubre de 2017 1:07

Todas las respuestas

  • Podrías hacer algo como:

    With(
    Select top(10) campo1, campo2 from Tabla 
    Order by campo1 desc
    ) as X
    
    With(
    Select top(10) campo1, campo2 from Tabla 
    Order by campo1 asc
    ) as Y
    
    Select X
    Union All
    Select Y
    Saludos


    Brayan De la Cruz
    Lima - Perú

    lunes, 9 de octubre de 2017 18:15
  • Gracias Brayan

    Pero...

    1° Al utilizar directamente el Esquema que sugieres muestra un Error en los paréntesis indicando que falta un ID, QUOTED_ID, XLMNAMESPACES...

    Se deduce que este Esquema hay que implementarlo dentro de un bloque mayor.

    ¿Cuál sería el Script Completo?

    2° Por la implementación de la Estructura que propones de alguna manera esto significaría que, ¿no se puede utilizar directamente el operador UNION en una misma Tabla?

    Desde ya Muchísimas Gracias


    Skar.2007

    lunes, 9 de octubre de 2017 23:28
  • ¿Se puede utilizar el operador UNION para SubConsultas de una misma Tabla?

    Claro, ¿por qué no?

    SELECT * FROM dbo.TableName WHERE Id IN (1, 2, 3)
    UNION ALL
    SELECT * FROM dbo.TableName WHERE Id IN (4, 5, 6) ORDER BY ID
    GO

    Para resolver el caso que presentas requieres escribir dos consultas y ordenarlas de manera ascendente/descendente para tomar las diez primeras filas y unirlas mediante el operador UNION, sin embargo no es posible ordenar las subconsultas que participan en la unión sino hasta después de haberse formado el conjunto resultante. Una salida al problema es recuperar las filas en una tabla derivada y los resultados -de la consulta externa- unirlos mediante el operador UNION, por ejemplo:

    SELECT t1.id, t1.Col1 FROM 
        (SELECT TOP(10) id, Col1 FROM dbo.TableName ORDER BY id ASC) t1
    UNION ALL 
    SELECT t2.id, t2.Col1 FROM 
        (SELECT TOP(10) id, Col1 FROM dbo.TableName ORDER BY id DESC) t2
    ORDER BY id;
    GO


    Nuestra profesión exige tener pasión por resolver problemas de una manera óptima y eficiente.
    • Marcado como respuesta Skar.2007 martes, 10 de octubre de 2017 4:25
    martes, 10 de octubre de 2017 1:07