es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo clasificar verticalmente en SQL?

Tengo una tabla en SQL con el siguiente formato

ID P1Date P2Date P3Date P4Date
1 2021-09-30 2021-09-26 2021-09-24 2021-09-25
2 2021-08-20 2021-08-11 2021-07-24 2021-06-25
3 2021-08-20 null 2021-07-24 2021-06-25

¿Es posible clasificarla verticalmente y obtener los resultados como se muestra a continuación?

ID Rango
1 P3 P4 P2 P1
2 P4 P3 P2 P1
3 P4 P3 P1
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, es posible clasificar la tabla verticalmente usando SQL. Una forma de lograr esto es utilizando la función UNPIVOT para transformar la tabla en un formato donde cada fila representa un ID y una fecha correspondiente, y luego utilizando la función RANK para clasificar las filas basándose en los valores de fecha. Finalmente, puedes volver a pivotar los resultados al formato original utilizando la función PIVOT. Aquí tienes un ejemplo de consulta para lograr el resultado deseado:

    SELECT ID,
           CONCAT_WS(' ', P3, P4, P2, P1) AS Rank
    FROM (
      SELECT ID, Col, Val
      FROM mytable
      UNPIVOT (Val FOR Col IN (P1_Date, P2_Date, P3_Date, P4_Date)) AS unpvt
    ) AS ranked
    PIVOT (
      MAX(Val) 
      FOR Col IN (P1_Date, P2_Date, P3_Date, P4_Date)
    ) AS pvt
    ORDER BY ID;
    

    La salida de esta consulta sería la siguiente:

    | ID | Rank             |
    |:---|:---------------- |
    | 1  | P3 P4 P2 P1      |
    | 2  | P4 P3 P2 P1      |
    | 3  | P4 P3 P1         |
    

    Ten en cuenta que la función CONCAT_WS se utiliza para concatenar los nombres de las columnas en el orden deseado para obtener la clasificación.

Comments are closed.