MySQL Выберите Query для создания динамического столбца Результат
Мне нужно написать запрос, который возвращает столбец динамически. Например, у меня есть таблица tblTest со столбцами:
Id, Name, Type, Amount
1, Receipt, Cash 100
2, Receipt, Card 200
3, Receipt, Cheque 250
4, Receipt, Card 150
5, Receipt, Cash 100
6, Payment, Cash 300
7, Payment, Cheque 400
SQL-запрос:
SELECT
Name,
SUM(CASE WHEN Type = 'Cash' THEN Amount ELSE 0 END) Cash,
SUM(CASE WHEN Type = 'Card' THEN Amount ELSE 0 END) Card,
SUM(CASE WHEN Type = 'Cheque' THEN Amount ELSE 0 END) Cheque
FROM tblTest
GROUP BY
Name;
это возвращает меня,
Приведенный выше результат соответствует моему требованию, но в моем случае Тип наличных денег, карты, чека и т. д. в приведенных выше данных не предопределены, которые могут быть получены динамически, тогда как я могу управлять ими. Пожалуйста, помогите мне построить динамические столбцы SQL для этого.
Заранее спасибо..
2 ответа
Вам нужно использовать динамический пивот
Создайте свой сводный запрос динамически.
Основные шаги заключаются в следующем
- Объявить переменную
@sql
нести свойSUM
функция иCASW WHEN
выражение - использование
CONCAT
объединить вашиSUM
функция иCASW WHEN
Строка выражения и главнаяselect
строка. - использование
EXECUTE
Функция выполняет SQL динамически.
выглядеть так
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(CASE WHEN Type =''',
Type,
''' THEN Amount END) AS ',
Type
)
) INTO @sql
FROM tblTest;
SET @sql = CONCAT('SELECT
Name,', @sql, '
FROM tblTest
GROUP BY
Name;');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Результат
Name Cash Card Cheque
1 Payment 300 NULL 400
2 Receipt 200 350 250
Хей,
Надеюсь, я понял тебя правильно.
select name, type, sum(CASE WHEN Type in (select DISTINCT sub.type from
tblTest sub) THEN Amount ELSE 0 END) as "sum" from tblTest
group by name, type;