У меня есть рабочая процедура, которая показывает имена активов в названных столбцах 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
MySQL Pivot без нулей или пробелов ⇐ MySql
Форум по Mysql
1745851790
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, '%')',
Подробнее здесь: [url]https://stackoverflow.com/questions/79593828/mysql-pivot-without-nulls-or-spaces[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия