Hi I've got the following mysql table
How can I merge the two rows hilighted in red?
This is my stored procedure code:
BEGIN
SELECT
GROUP_CONCAT(
CONCAT("MAX(IF(km_kondomanager_millesimal_table_value_table_id='", km_kondomanager_millesimal_table_value_table_id, "',km_kondomanager_millesimal_table_millesimal_value ,0.00)) AS '", km_kondomanager_millesimal_table_name, "'"), "
"
)INTO @answers
FROM (
SELECT DISTINCT km_kondomanager_millesimal_table_value_table_id, km_kondomanager_millesimal_table_name FROM km_kondomanager_millesimal_table_values INNER JOIN km_kondomanager_millesimal_table
ON km_kondomanager_millesimal_table_values . km_kondomanager_millesimal_table_value_table_id = km_kondomanager_millesimal_table. km_kondomanager_millesimal_table_id
WHERE km_kondomanager_millesimal_table_value_group_id = km_group
) A;
SET @query :=
CONCAT(
'SELECT km_kondomanager_millesimal_table_value_building_id AS "Flat ID", km_kondomanager_building_unit_code AS "Building Code", CONCAT_WS(" ", km_user_first_name, km_user_last_name) AS "Proprietario", ', @answers,
'FROM km_kondomanager_millesimal_table_values
INNER JOIN km_kondomanager_building_units
ON km_kondomanager_millesimal_table_values . km_kondomanager_millesimal_table_value_building_id = km_kondomanager_building_units. km_kondomanager_building_unit_id
LEFT JOIN km_kondomanager_building_unit_owners
ON km_kondomanager_millesimal_table_values . km_kondomanager_millesimal_table_value_building_id = km_kondomanager_building_unit_owners. km_kondomanager_building_unit_owner_building_unit_id
LEFT JOIN km_users
ON km_kondomanager_building_unit_owners . km_kondomanager_building_unit_owner_id = km_users. km_user_id
WHERE km_kondomanager_millesimal_table_value_group_id = ',km_group,' GROUP BY km_kondomanager_millesimal_table_value_building_id, km_user_first_name, km_user_last_name'
);
PREPARE statement FROM @query;
EXECUTE statement;
END
Ok, my following code is build around your statement. I can not test it because i don't have any data, so you have to debug it further.
But the gist is, You select your Flate ID, MAX building code and the GROUP_CONCAT Proprietario GROUP By Flate ID and add your @answer there after you selected Flate ID, Building Id and Proprietario without the @answer. The variable @answer2 contains the maximum of value of the column km_kondomanager_millesimal_table_name from the inner Select
BEGIN
SELECT
GROUP_CONCAT(
CONCAT
(
"MAX
(
IF
(km_kondomanager_millesimal_table_value_table_id='",
km_kondomanager_millesimal_table_value_table_id, "'
,km_kondomanager_millesimal_table_millesimal_value ,0.00
)
) AS '", km_kondomanager_millesimal_table_name, "'
"), "
"
),GROUP_CONCAT(
CONCAT
(
"MAX
(
'", km_kondomanager_millesimal_table_name, "'
) AS '", km_kondomanager_millesimal_table_name, "'
"), "
"
) INTO @answers,@answers2
FROM (
SELECT
DISTINCT km_kondomanager_millesimal_table_value_table_id,
km_kondomanager_millesimal_table_name
FROM
km_kondomanager_millesimal_table_values
INNER JOIN km_kondomanager_millesimal_table
ON
km_kondomanager_millesimal_table_values.
km_kondomanager_millesimal_table_value_table_id
=
km_kondomanager_millesimal_table.
km_kondomanager_millesimal_table_id
WHERE km_kondomanager_millesimal_table_value_group_id = km_group
) A;
SET @query :=
CONCAT(
'SELECT "Flat ID",MAX("Building Code"),
GROUP_CONCAT(Proprietario), ', @answers2,
' FROM
(
SELECT
km_kondomanager_millesimal_table_value_building_id AS "Flat ID"
, km_kondomanager_building_unit_code AS "Building Code"
, CONCAT_WS(" ", km_user_first_name, km_user_last_name) AS
"Proprietario"', @answers,
' FROM
km_kondomanager_millesimal_table_values
INNER JOIN km_kondomanager_building_units
ON km_kondomanager_millesimal_table_values.
km_kondomanager_millesimal_table_value_building_id
= km_kondomanager_building_units.
km_kondomanager_building_unit_id
LEFT JOIN km_kondomanager_building_unit_owners
ON km_kondomanager_millesimal_table_values.
km_kondomanager_millesimal_table_value_building_id
= km_kondomanager_building_unit_owners.
km_kondomanager_building_unit_owner_building_unit_id
LEFT JOIN km_users
ON km_kondomanager_building_unit_owners.
km_kondomanager_building_unit_owner_id
= km_users km_user_id
WHERE
km_kondomanager_millesimal_table_value_group_id = '
,km_group,
' GROUP BY
km_kondomanager_millesimal_table_value_building_id
, km_user_first_name
, km_user_last_name
) t1
GROUP BY "Flat ID";'
);
PREPARE statement FROM @query;
EXECUTE statement;
END
Ok so I believe I've found the solution to the problem thanks to @nbk here it is
BEGIN
SELECT
GROUP_CONCAT(
CONCAT("MAX(IF(km_kondomanager_millesimal_table_value_table_id='", km_kondomanager_millesimal_table_value_table_id, "',km_kondomanager_millesimal_table_millesimal_value ,0.00)) AS '", km_kondomanager_millesimal_table_name, "'"), "
"
)INTO @answers
FROM (
SELECT DISTINCT km_kondomanager_millesimal_table_value_table_id, km_kondomanager_millesimal_table_name FROM km_kondomanager_millesimal_table_values INNER JOIN km_kondomanager_millesimal_table
ON km_kondomanager_millesimal_table_values . km_kondomanager_millesimal_table_value_table_id = km_kondomanager_millesimal_table. km_kondomanager_millesimal_table_id
WHERE km_kondomanager_millesimal_table_value_group_id = km_group
) A;
SET @query :=
CONCAT(
'SELECT km_kondomanager_millesimal_table_value_building_id AS "Building ID", km_kondomanager_building_unit_code AS "Building Code", group_concat(DISTINCT CONCAT_WS(" ", km_user_first_name, km_user_last_name)) AS "Proprietario", ', @answers,
' FROM km_kondomanager_millesimal_table_values
INNER JOIN km_kondomanager_building_units
ON km_kondomanager_millesimal_table_values . km_kondomanager_millesimal_table_value_building_id = km_kondomanager_building_units. km_kondomanager_building_unit_id
LEFT JOIN km_kondomanager_building_unit_owners
ON km_kondomanager_millesimal_table_values . km_kondomanager_millesimal_table_value_building_id = km_kondomanager_building_unit_owners. km_kondomanager_building_unit_owner_building_unit_id
LEFT JOIN km_users
ON km_kondomanager_building_unit_owners . km_kondomanager_building_unit_owner_id = km_users. km_user_id
WHERE km_kondomanager_millesimal_table_value_group_id = ',km_group,' GROUP BY km_kondomanager_millesimal_table_value_building_id'
);
PREPARE statement FROM @query;
EXECUTE statement;
END
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.