MySQL Pivot без нулей или пробеловMySql

Форум по Mysql
Ответить
Anonymous
 MySQL Pivot без нулей или пробелов

Сообщение Anonymous »

У меня есть рабочая процедура, которая показывает имена активов в названных столбцах Zonename -< /p>
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 и т. Д. Должны двигаться вверх, поэтому в верхней части столбца стойки нет места. Любые мысли ценятся.

SELECT DISTINCT zonename from node


CALL Pivot2("${rs.zonename}","${found_zone}");






No data returned from stored procedure.


CREATE DEFINER=`root`@`localhost` PROCEDURE `Pivot2`(IN this_zone VARCHAR(45), OUT found_zone VARCHAR(45))
BEGIN

DECLARE sql_query TEXT;

SET sql_query = CONCAT(
'SELECT ',
'MAX(CASE WHEN zonename = "', zonename,
'" THEN asset_name ELSE '''' END) AS `', found_zone,'`'
' 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
' AND node.zonename LIKE CONCAT('%', this_zone, '%')',
') 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
< /code>
Проблема в настоящее время находится в этой команде (ссылка на переменную varchar в середине строки concat), я не могу получить синтаксис справа. < /p>
' AND node.zonename LIKE CONCAT('%', this_zone, '%')',


Подробнее здесь: https://stackoverflow.com/questions/795 ... -or-spaces
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «MySql»