MySQL - Como hacer que se me muestre el resultado en una sola fila en mysql

 
Vista:
Imágen de perfil de Yoel
Val: 17
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Como hacer que se me muestre el resultado en una sola fila en mysql

Publicado por Yoel (13 intervenciones) el 11/04/2020 05:51:25
Hola a todos: tengo la siguiente situación, estoy haciendo una consulta con mysql para obtener todos valores por aseguradora de una mismo id separados por columnas. Para obtener los resultados por columnas, a la hora de ejecutar el Query estoy usando CASE con la siguiente condición de GROUP BY (GROUP BY agent.id, `client`.`id_insured`) si me da el resultado esperado en las nuevas columnas que estoy creando, mostrandome una linea por cada aseguradora que tengo pero si quito id_insured del GROUP BY para obtener el resultado en una sola línea por cada id las columnas (numclimol, nummenmol, numcliamb, nummenamb, numcliflo, nummenflo, numcliosc, nummenosc, numclicig, nummencig, numclibri, nummenbri) me devuelven valor null . A continuación les dejo el código para ver si me pueden ayudar.

Gracias.

Ejemplo de como me lo está mostrado


id1 | 5 | 10 |
id1 | | | 4 | 6


Ejemplo de como lo necesito

id1 | 5 | 10 | 4 | 6


Consulta SQL

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT CONCAT(agent.agent_name,' ',agent.agent_lastname) AS agent, `agent`.`npn`, SUBSTRING(`client`.`aplication_date`,1,4) AS pyear,GROUP_CONCAT(DISTINCT `client`.agent2 ORDER BY  `client`.agent2 ASC SEPARATOR ' | ') AS agent2,
			CASE WHEN `client`.`id_insured` = 1 THEN COUNt(`client`.id) END AS numclimol,
			CASE WHEN `client`.`id_insured` = 1 THEN SUM(`client`.`family_menber`) END AS nummenmol,
			CASE WHEN `client`.`id_insured` = 2 THEN COUNt(`client`.id) END AS numcliamb,
			CASE WHEN `client`.`id_insured` = 2 THEN SUM(`client`.`family_menber`) END AS nummenamb,
			CASE WHEN `client`.`id_insured` = 3 THEN COUNt(`client`.id) END AS numcliflo,
			CASE WHEN `client`.`id_insured` = 3 THEN SUM(`client`.`family_menber`) END AS nummenflo,
			CASE WHEN `client`.`id_insured` = 9 THEN COUNt(`client`.id) END AS numcliosc,
			CASE WHEN `client`.`id_insured` = 9 THEN SUM(`client`.`family_menber`) END AS nummenosc,
			CASE WHEN `client`.`id_insured` = 11 THEN COUNt(`client`.id) END AS numclicig,
			CASE WHEN `client`.`id_insured` = 11 THEN SUM(`client`.`family_menber`) END AS nummencig,
			CASE WHEN `client`.`id_insured` = 12 THEN COUNt(`client`.id) END AS numclibri,
			CASE WHEN `client`.`id_insured` = 12 THEN SUM(`client`.`family_menber`) END AS nummenbri
			FROM agent INNER JOIN `client` ON `client`.id_agent = agent.id WHERE `client`.`borrado` <> 1
			AND SUBSTRING(`client`.`aplication_date`,1,4) = '2020' GROUP BY agent.id,  `client`.`id_insured`   ORDER BY agent.id ASc, `client`.`id_insured` ASC
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Como hacer que se me muestre el resultado en una sola fila en mysql

Publicado por Andres (12 intervenciones) el 11/04/2020 06:19:49
puedes mostrar las tablas que usas, y los campos???
mejor si pones unos datos de prueba, y el resultado que quieres, ya que arriba dices el resultado, pero no es muy claro de donde se obtienen.

Ahora si tienes los sql de tus tablas con datos mejor, asi se puede probar el resultado que quieres
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Como hacer que se me muestre el resultado en una sola fila en mysql

Publicado por Andres (12 intervenciones) el 11/04/2020 07:11:54
En vista que no respondiste, intente deducir tu resultado, puedes probar así, nose si hay algún error de sintaxis se corrige, pero la lógica creo que esta bien. También puedes probar cambiando el GROUP BY que puse cambiando por el tuyo que si funciona.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
SELECT
	CONCAT(agent.agent_name,' ',agent.agent_lastname) AS agent,
	`agent`.`npn`,
	SUBSTRING(`client`.`aplication_date`,1,4) AS pyear,
	GROUP_CONCAT(DISTINCT `client`.agent2 ORDER BY  `client`.agent2 ASC SEPARATOR ' | ') AS agent2,
	COUNt(`client`.id) AS numclimol,
	SUM(`client`.`family_menber`) AS nummenmol
FROM agent INNER JOIN `client` ON `client`.id_agent = agent.id WHERE
`client`.`borrado` <> 1 AND
SUBSTRING(`client`.`aplication_date`,1,4) = '2020' AND
(`client`.`id_insured` = 1 OR
`client`.`id_insured` = 2 OR
`client`.`id_insured` = 3 OR
`client`.`id_insured` = 9 OR
`client`.`id_insured` = 11 OR
`client`.`id_insured` = 12)
GROUP BY 1,2,3
ORDER BY agent.id ASc, `client`.`id_insured` ASC

Saludos,
Andres Ruiz
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 17
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Como hacer que se me muestre el resultado en una sola fila en mysql

Publicado por Yoel (13 intervenciones) el 11/04/2020 14:42:49
Hola gracias por contestar, disculpe si no le conteste ante pero tenemos diferencia de horario. El resultado si se me muestra en una sola fila por cada id pero necesito incorporar una columna por cada aseguradora. Ejemplo la aseguradora 1 responde a una columna la dos a otra y así sucesivamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 26
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Como hacer que se me muestre el resultado en una sola fila en mysql

Publicado por Andres (12 intervenciones) el 11/04/2020 17:02:57
Perdon, creo que recien te entendi, ayer no me di cuenta que tenian diferentes nombres las columnas.

Nose si me puedes mandar la estructura de las 2 tablas con datos si es posible, pero eso tienes que hacer subconsultas por cada columna que quieres algo como esto;

SELECT
CONCAT(agent.agent_name,' ',agent.agent_lastname) AS agent,
`agent`.`npn`,
SUBSTRING(`client`.`aplication_date`,1,4) AS pyear,
GROUP_CONCAT(DISTINCT `client`.agent2 ORDER BY `client`.agent2 ASC SEPARATOR ' | ') AS agent2,

SELECT COUNt(`client`.id) AS numclimol FROM ......
SELECT SUM(`client`.`family_menber`) AS nummenmol FROM .......
SELECT COUNT(.......
SELECT SUM(.......
SELECT COUNT(.......
SELECT SUM(.......


FROM agent .......... etc, //en esta parte puede variar ya que los datos obtendrás de las subconsultas

Como veras esta para completar la parte de las subconsultas, por eso te decía si puedes pasar las tablas. pero si quieres intentarlo, creo que ese es el camino correcto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Yoel
Val: 17
Ha aumentado 1 puesto en MySQL (en relación al último mes)
Gráfica de MySQL

Como hacer que se me muestre el resultado en una sola fila en mysql

Publicado por Yoel (13 intervenciones) el 12/04/2020 00:28:09
Gracias por su respuesta ya me quedo la cosulta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar