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.

Filtrar filas en múltiples campos en donde

Tengo una tabla con Mutaciones en mi base de datos de Postgres (Versión 10).

Si creo un nuevo usuario, obtengo una fila por cada atributo que se actualiza. Para el usuario final, solo quiero presentar el nombre + apellido para el usuario que se ha agregado y no como otros 40 atributos.

Ya tengo una consulta bastante compleja y ahora quiero filtrar los demás atributos cuando se crea un usuario.

Aquí hay un ejemplo simple de mi problema: Fiddle

Esto es lo que quiero que se vea en mi salida: Quiero concatenar el nombre + el primer nombre en 1 fila y no mostrar los demás atributos en Personas Creadas.

userid table1 did execution_date change_type attr value_old value_new
1 Persons 1 2021-01-01 Create Name null Dan White
2 Persons 4 2021-01-01 Update Email old@email.com new@email.com
3 User 5 2021-01-03 Update Nombre de usuario abc rocky
4 Deparm 6 2021-01-02 Delete Código 01 null

No sé una buena manera de agregar esta parte del filtro en mi consulta…

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Se puede utilizar una sentencia CASE para filtrar los atributos que no se desean mostrar. Por ejemplo:

    SELECT userid, table1, did, execution_date, change_type, 
        CASE WHEN attr = 'Name' THEN CONCAT(value_old, ' ', value_new) ELSE attr END AS attr, 
        value_old, value_new
    FROM my_table;
    

    Esto devolverá la siguiente salida:

    userid table1 did execution_date change_type attr value_old value_new
    1 Persons 1 2021-01-01 Create Dan White null Dan White
    2 Persons 4 2021-01-01 Update Email old@email.com new@email.com
    3 User 5 2021-01-03 Update Username abc rocky
    4 Deparm 6 2021-01-02 Delete Code 01 null

Comments are closed.