Con estas clausulas podemos limitar los resultados así como ordenarlos.
Para las consultas se usa la base de datos AdventureWorks2014 de Microsoft
DISTINCT:
Podremos mostrar los distintos elementos o combinaciones de estos.
Vamos a mostrar dos ejemplos el primero es los distintos colores de una tabla.
La segunda son las distintas combinaciones de subcategorías y colores.
1 2 3 4 5 6 7 |
--Distintos colores de la tabla Product SELECT DISTINCT color FROM Production.Product -El nombre de la subcategoria y sus colores SELECT DISTINCT subcategory.Name, color FROM Production.Product AS product INNER JOIN Production.ProductSubcategory AS subcategory ON product.ProductSubcategoryID=subcategory.ProductSubcategoryID |
Resultado:
Os añado este enlace al blog de campus MVP, que explica como podríamos obtener una única línea por subcategoría y los colores separados por ,
Montain Bikes Black, Silver
Lo explica muy bien y en algunos casos puede ser interesante.
ORDER BY ( ASC | DESC ):
Permite ordenar los resultados de forma ascendente (ASC) es el orden por defecto o descendente (DESC)
1 2 3 4 5 6 7 8 9 |
--Ordenamos los productos por mayor beneficio, con menos stock y con mayor coste SELECT [ProductID] ,[Name] ,[ProductNumber] ,ListPrice- StandardCost as beneficios ,[SafetyStockLevel] ,[StandardCost] FROM [AdventureWorks2014].[Production].[Product] ORDER BY beneficios DESC, safetyStockLevel, StandardCost DESC |
Permite ordenar por los Alias, no se pueden ordenar columnas de tipo ntext, texto, imagen, geography, geometry, y XML.
ORDER BY OFFSET .. FETCH:
Disponible a partir de SQL Server 2012
Permite limitar el conjunto de filas. Es muy práctico si queremos paginar los resultados.
OFFSET numRowsOmitir { ROW | ROWS } FETCH { FIRST | NEXT } numRowsaDevolver
Usar ROW o ROWS y usar FIRST o NEXT no afecta al resultado, es indiferente.
1 2 3 4 5 6 7 8 |
--Obtenemos las 10 primeras personas SELECT Name, StateProvinceCode FROM [AdventureWorks2014].[Person].[StateProvince] ORDER BY name OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY; --Obtenemos las 10 siguientes personas SELECT Name, StateProvinceCode FROM [AdventureWorks2014].[Person].[StateProvince] ORDER BY name OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY; |
Tanto numRowsOmitir del OFFSET como numRowsaDevolverdel FETCH, pueden ser una variable, una expresión incluso una subconsulta que devuelve un escalar.
Puedes ver más ejemplos en Microsoft ORDER BY
TOP:
Limita la cantidad de filas que deseas obtener. Es muy útil si lo usamos con el ORDER BY.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
--Obtenemos 10 productos SELECT TOP 10 [ProductID] ,[Name] ,[ProductNumber] ,[MakeFlag] ,[FinishedGoodsFlag] ,[Color] FROM [AdventureWorks2014].[Production].[Product] --Obtenemos el producto con Código más alto. SELECT TOP 1 [ProductID] FROM [AdventureWorks2014].[Production].[Product] ORDER BY ProductID DESC --Obtenemos el mayor coste SELECT TOP 1 [StandardCost] FROM [AdventureWorks2014].[Production].[Product] ORDER BY StandardCost DESC |
Resultados: