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.

¿Convertir filas de una base de datos en una sola columna (de algunas tablas diferentes)?

Trabajando con una base de datos muy fragmentada (tuve que encontrar las llaves de cada tabla yo mismo), necesito obtener un conjunto de datos funcional que requiere conectar alrededor de 4 tablas para el conjunto de datos principal. Mi problema está en la Tabla 2, donde cada cuenta de Persona se adjunta a múltiples cuentas que luego llevan a códigos de estado. Entonces, en lugar de lo deseado:

Persona ETC Códigos
P1 XXX Código1, Código2, Etc
P2 XXX Código1, Código2, Etc

En su lugar, se muestra:

Persona ETC Códigos
P1 XXX Código1
P1 XXX Código2
P2 XXX Código1
P2 XXX Código2

El código actualmente se asemeja a esto:

SELECT P.PersonID, (algunos otros valores de P), CD.Códigos
FROM (((Tabla1 as P 
INNER JOIN Tabla2 as t2 ON P.PersonID = t2.PersonFID) 
INNER JOIN Tabla3 as T3 ON T2.ID2 = T3.ID)
INNER JOIN TablaCD as CD ON T3.ID2 = CD.ID)

He pasado horas intentando tal vez consultar y unirlos a través de subconsultas anidadas usando WHERE PersonID IN(etc), pero termina siendo casi lo mismo. Tampoco puedo agruparlos para establecerlos todos iguales. No estoy seguro de qué hacer y cualquier ayuda sería muy apreciada. Y disculpen si ya hay una respuesta, he estado arrancándome el cabello y he buscado mucho, pero podría haberlo pasado por alto. El objetivo final es crear una nueva tabla con toda la información.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la unión entre Table2 y TableCD, donde cada cuenta de persona se está adjuntando a múltiples cuentas que llevan a códigos de estado. Para resolver esto, puedes usar una subconsulta para agrupar los códigos por PersonID antes de unirlos a Table1.

    Aquí tienes un ejemplo de consulta que debería darte el resultado deseado:

    SELECT P.PersonID, (Algunos valores más de P), CD.Codigos
    FROM Table1 as P 
    INNER JOIN (
      SELECT T2.PersonFID, GROUP_CONCAT(CD.Codigos) as Codigos
      FROM Table2 as T2 
      INNER JOIN Table3 as T3 ON T2.ID2 = T3.ID
      INNER JOIN TableCD as CD ON T3.ID2 = CD.ID
      GROUP BY T2.PersonFID
    ) as CD ON P.PersonID = CD.PersonFID
    

    La subconsulta agrupa los códigos de estado por PersonID utilizando la función GROUP_CONCAT, que concatena los valores separados por un delimitador (el valor predeterminado es la coma). Luego, el resultado se une de nuevo a Table1 en PersonID para obtener los otros valores que necesitas.

    Ten en cuenta que esta consulta asume que estás utilizando MySQL o MariaDB, que tienen la función GROUP_CONCAT. Si estás utilizando un sistema de base de datos diferente, es posible que debas utilizar una función diferente para concatenar los valores o ajustar la sintaxis en consecuencia.

Comments are closed.