ejercicios - order by sql server ejemplos
¿Cómo mostrar los registros de una tabla ordenada como en la cláusula where? (4)
Estoy tratando de mostrar los registros, ordene como en la cláusula where ... ejemplo:
select name from table where name in (''Yaksha'',''Arun'',''Naveen'');
Muestra Arun,Naveen,Yaksha (alphabetical order)
Quiero mostrarlo en el mismo orden, ie ''Yaksha''''Arun'',''Naveen''
cómo mostrar esto ... Estoy usando oracle
db.
Agregue este ORDER BY
al final de la consulta:
order by case name when ''Yaksha'' then 1
when ''Arun'' then 2
when ''Naveen'' then 3
end
(No hay otra forma de obtener ese pedido. Necesita un ORDER BY para obtener un orden de resultado específico).
Puede ser un poco torpe, pero puede crear un pedido personalizado con una expresión de case
:
SELECT *
FROM my_table
WHERE name IN (''Yaksha'', ''Arun'',''Naveen'')
ORDER BY CASE name WHEN ''Yaksha'' THEN 1
WHEN ''Arun'' THEN 2
WHEN ''Naveen'' THEN 3
END ASC
Una opción un poco más larga, pero una que evita la duplicación de los literales de cadena es usar una subconsulta:
SELECT m.*
FROM my_table m
JOIN (SELECT ''Yaksha'' AS name, 1 AS name_order FROM dual
UNION ALL
SELECT ''Arun'' AS name, 2 AS name_order FROM dual
UNION ALL
SELECT ''Naveen'' AS name, 3 AS name_order FROM dual) o
ON o.name = m.name
ORDER BY o.name_order ASC
Puedes probar con algo como lo siguiente:
SELECT *
FROM test
WHERE name IN ( ''Yaksha'', ''Arun'', ''Naveen'' )
ORDER BY instr ( q''[''Yaksha'', ''Arun'', ''Naveen'']'', name ) ASC
De esta manera podría ser útil si su lista IN es de alguna manera dinámica.
Si la lista de valores es dinámica o simplemente no desea repetir los valores, puede usar (o abusar, según su punto de vista) una colección de tablas y unir su tabla real a una expresión de colección de tablas en lugar de usar IN
:
select your_table.name
from table(sys.odcivarchar2list(''Yaksha'',''Arun'',''Naveen'')) t
join your_table on your_table.name = t.column_value;
Lo cual generalmente funcionará, pero, por supuesto, sin una cláusula de orden por pedido no se garantiza que funcione, por lo que puede usar una vista en línea para asignar el orden:
select your_table.name from (
select row_number() over (order by null) as rn, column_value as name
from table(sys.odcivarchar2list(''Yaksha'',''Arun'',''Naveen''))
) t
join your_table on your_table.name = t.name
order by t.rn;
Esto aún se basa en row_number() over (order by null)
usando el orden de los elementos en la colección; que se basa en la eliminación de una colección preservando el orden de los elementos. Tampoco creo que eso esté garantizado, por lo que todavía hay un riesgo involucrado.