Quiero un orden jerárquico en mi salida, pero no sé cómo?

votos
1

Quiero en la salida de un orden jerárquico de este modo:

Mis datos :

Name            | Cost   | Level 
----------------+--------+------
Car1            | 2000   |   1
 Component1.1   | 3000   |   2
  Component1.2  | 2300   |   3
Computer2       | 5000   |   1
 Component2.1   | 2000   |   2
  Component2.2  | Null   |   3

Salida: Mostrar todos esos datos, que tiene dinero en ella y el orden que por el nivel, algo así como la primera 1, luego 2, luego 3, y después de eso empezar con 1 otra vez.

Name              | Level
------------------+------
Car1              |   1
 Component1.1     |   2
  Component1.2    |   3
Computer          |   1
 Component2.1     |   2

Lo que ORDER BYhace es:

Name            | Level
----------------+------
Car1            |   1
Computer1       |   1
Component1.1    |   2
Component2.1    |   2
Component1.2    |   3
Component2.2    |   3 

Probé la CONNECT BY PRIORfunción y no funcionó bien

 SELECT Name, Level
   FROM Product
CONNECT BY PRIOR Level;
Publicado el 20/10/2018 a las 10:28
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
0

Todavía no está claro si esto es lo que realmente está esperando. Me parece de su conjunto de datos, que desea poner en orden numérico de los componentes sobre la base de una especie de número de versión al final del componente. Si eso es realmente lo que quiere, entonces puede ignorar los caracteres no numéricos en el nombre y el orden de los números puros hacia el final de la cadena (con la necesaria wherecláusula).

ORDER BY REPLACE ( name, TRANSLATE(name,' .0123456789',' '),''); 

Si ese es el caso, entonces la adición de leveldemasiado a la ORDER BYno debería hacer ninguna diferencia a menos que su orden numérico de las versiones y niveles están sincronizados.

Un problema puede aparecer si tiene componentes como component2_name1.2, etc, que podrían romper esta lógica, por lo cual puede requerir REGEXPpara identificar el patrón requerido. Sin embargo, no parece por lo que desde sus datos y que supone que para ser el caso, y es posible que desee para aclarar si eso no es lo que es posible que tenga siempre en su conjunto de datos.

He aquí una demostración del resultado obtenido para los datos de la muestra.

Manifestación

Este trabajo voluntad del carácter numérico es siempre un decimal válido y sólo tiene un punto decimal. Si tiene sistema de versiones complejo como por ejemplo 1.1.8, 2.1.1etc, se necesita mucho ordenamiento sofisticada en la parte superior de REPLACE ( name, TRANSLATE(name,' .0123456789',' '),'').

Va a encontrar ejemplos de este tipo de mensajes como éste Aquí

Nota : Te pediría que también lea las instrucciones aquí para saber cómo hacer una buena pregunta. Esto evitaría toda confusión a las personas que tratan de entender y responder a su pregunta.

Respondida el 20/10/2018 a las 14:15
fuente por usuario

votos
0

sugiero esto para usted:

SELECT Name, Level FROM Product ORDER BY Name, Level WHERE Money!='Null' ASC;

Me gustaría que esto ayuda que el hermano

Respondida el 20/10/2018 a las 12:22
fuente por usuario

votos
0

Se puede utilizar por debajo de uno

SELECT Name, Level
FROM Auction
ORDER BY Name, Level
WHERE Money!='Null' ;

Para hacer por Nombre imprimirá el resultado en orden jerárquico, pero si tiene una columna denominada ID de padre, entonces habría sido más fácil de demostrar.

Respondida el 20/10/2018 a las 12:02
fuente por usuario

votos
0

En MySQL que usaría normaly 'por fin'. Así que si usted quiere pedir el "nivel" fila de la tabla su synntax sería algo como esto:

SELECT * FROM items ORDER BY level ASC

Puede hacer uso de ASC (ascendente) o DESC (descendente).

Espero que esto te ayudará.

Respondida el 20/10/2018 a las 10:33
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more