¿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 |
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:
La salida de esta consulta sería la siguiente:
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.