Principales respuestas
Consultas: Top 10 Ascendente Y Descendente Simultáneo

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
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
Todas las respuestas
-
-
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
-
¿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