DECLARE pivot_columns TEXT;
DECLARE sql_query TEXT;
-- Step 1: Generate the pivot columns dynamically (for each zone)
SELECT GROUP_CONCAT(
DISTINCT CONCAT(
#'MAX(CASE WHEN zonename = "', zonename,
#'" THEN asset_name END) AS `', zonename, '`'
'MAX(CASE WHEN zonename = "', zonename,
'" THEN asset_name ELSE '''' END) AS `', zonename,'`'
)
) INTO pivot_columns
FROM (SELECT DISTINCT zonename FROM node) AS distinct_zones;
-- Step 2: If no pivot columns are found, return an error
IF pivot_columns IS NULL OR pivot_columns = '' THEN
SELECT 'No zonenames found.' AS Error_Message;
ELSE
-- Step 3: Construct the final dynamic SQL query
SET sql_query = CONCAT(
'SELECT ',
pivot_columns,
' FROM (',
' SELECT asset.name AS asset_name, node.zonename ',
' FROM logs ',
' INNER JOIN asset ON asset.id = logs.assetid ',
' INNER JOIN node ON node.id = logs.nodeid ',
' WHERE asset.serial != "Unassigned" ',
' AND rssi >= threshold ',
' AND logs.ts = (SELECT MAX(ts) FROM logs WHERE assetid = asset.id) ',
' AND node.zonename IS NOT NULL ', -- Filtering out rows where zonename is NULL
') AS temp_rowed ',
'GROUP BY asset_name ',
'HAVING ',
' COUNT(CASE WHEN zonename IS NOT NULL THEN 1 END) > 0 ', -- Ensuring we only include rows where at least one zonename is NOT NULL
'ORDER BY asset_name;'
);
-- Step 4: Execute the dynamic SQL query
SET @stmt = sql_query; -- Assign the query to a session variable
PREPARE stmt FROM @stmt; -- Prepare the dynamic SQL from the session variable
EXECUTE stmt; -- Execute the prepared statement
DEALLOCATE PREPARE stmt; -- Deallocate the prepared statement
END IF;
Но это создает таблицу, показывающая пространства в некоторых столбцах,
это возможно для модификации процедуры или, возможно, обработки. так что процедура выполняет, как много раз существует разные имена зонена, чтобы у меня в итоге был «соединенный» представление о таблице, в котором нет мест или нулей? В примере выше, John, Lab и т. Д. Должны двигаться вверх, поэтому в верхней части столбца стойки нет места. Любые мысли ценятся.
У меня есть рабочая процедура, которая показывает имена активов в названных столбцах Zonename -< /p> [code]DECLARE pivot_columns TEXT; DECLARE sql_query TEXT;
-- Step 1: Generate the pivot columns dynamically (for each zone) SELECT GROUP_CONCAT( DISTINCT CONCAT( #'MAX(CASE WHEN zonename = "', zonename, #'" THEN asset_name END) AS `', zonename, '`' 'MAX(CASE WHEN zonename = "', zonename, '" THEN asset_name ELSE '''' END) AS `', zonename,'`' ) ) INTO pivot_columns FROM (SELECT DISTINCT zonename FROM node) AS distinct_zones;
-- Step 2: If no pivot columns are found, return an error IF pivot_columns IS NULL OR pivot_columns = '' THEN SELECT 'No zonenames found.' AS Error_Message; ELSE -- Step 3: Construct the final dynamic SQL query SET sql_query = CONCAT( 'SELECT ', pivot_columns, ' FROM (', ' SELECT asset.name AS asset_name, node.zonename ', ' FROM logs ', ' INNER JOIN asset ON asset.id = logs.assetid ', ' INNER JOIN node ON node.id = logs.nodeid ', ' WHERE asset.serial != "Unassigned" ', ' AND rssi >= threshold ', ' AND logs.ts = (SELECT MAX(ts) FROM logs WHERE assetid = asset.id) ', ' AND node.zonename IS NOT NULL ', -- Filtering out rows where zonename is NULL ') AS temp_rowed ', 'GROUP BY asset_name ', 'HAVING ', ' COUNT(CASE WHEN zonename IS NOT NULL THEN 1 END) > 0 ', -- Ensuring we only include rows where at least one zonename is NOT NULL 'ORDER BY asset_name;' );
-- Step 4: Execute the dynamic SQL query SET @stmt = sql_query; -- Assign the query to a session variable PREPARE stmt FROM @stmt; -- Prepare the dynamic SQL from the session variable EXECUTE stmt; -- Execute the prepared statement DEALLOCATE PREPARE stmt; -- Deallocate the prepared statement END IF; [/code] Но это создает таблицу, показывающая пространства в некоторых столбцах,
это возможно для модификации процедуры или, возможно, обработки. так что процедура выполняет, как много раз существует разные имена зонена, чтобы у меня в итоге был «соединенный» представление о таблице, в котором нет мест или нулей? В примере выше, John, Lab и т. Д. Должны двигаться вверх, поэтому в верхней части столбца стойки нет места. Любые мысли ценятся.