2017-02-23 8 views
-2

Я имел следующие выборочные данныенеобходимо преобразовать столбцы в строки в MYSQL

 
------------------------------|------|- 
Sishya School     | 3 | 
------------------------------|------|-- 
Chettinad Vidhyashram   | 2 | 
------------------------------|------|-- 
Asan Memorial School   | 8 | 
------------------------------|------|-- 
Maharishi Vidhya Mandir  | 1 | 
------------------------------|------|-- 
PSBB Memorial School   | 4 | 
------------------------------|------|-- 
D.V.S Public School   | 2 | 
------------------------------|------|-- 
St.Mary’s School    | 5 | 
------------------------------|------|-- 

Я хочу, чтобы преобразовать столбцы в строки так, чтобы таблица должна выглядеть следующим образом,

 
---------|----------------|-----------|-----------|---------|---------|------- 
Sishya |  Chettinad | Asan | Maharishi| PSBB | D.V.S |St.Mary’s 
School | Vidhyashram | Memorial| Vidhya | Memorial| Public| School 
     |    | School | Mandir | School | School| 
---------|----------------|-----------|-----------|---------|---------|------- 
     |    |   |   |   |   | 
3  |  2  |  8 |  1 |  4 |  2 |  5 
---------|----------------|-----------|-----------|---------|---------|---------            

Пожалуйста, помогите мне решить мою проблему.

+2

Что вы еще пробовали? –

+0

можете ли вы предоставить данные в таблице? –

+0

http://stackoverflow.com/questions/3392956/sql-how-to-transpose или http://stackoverflow.com/questions/16568228/how-to-transpose-mysql-table-rows-into-columns –

ответ

1

Может быть ниже решения поможет вам решить вашу проблему, вам нужно внести некоторые изменения в соответствии с вашей структурой таблиц.

Для этого решения вам необходимо выполнить хранимую процедуру.

Если это ваша структура таблицы:

CREATE TABLE `school` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `name` varchar(500) DEFAULT NULL, 
    `value` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; 
SET FOREIGN_KEY_CHECKS=1; 

Ниже решение работает, если выше ваша структура таблицы.

SET SESSION group_concat_max_len = (2056 * 2056); 

SET @sql = NULL; 

SELECT GROUP_CONCAT(DISTINCT 
      CONCAT(
       'MAX(CASE WHEN school.name ="',m.name,'"' 
           ' THEN school.value END)"',m.name , '"')) 
           INTO @sql 
              from school as m; 

SET @sql = CONCAT('SELECT value,',@sql, 
        ' FROM school'); 


PREPARE stmt FROM @sql; 
EXECUTE stmt; 
DEALLOCATE PREPARE stmt; 

Выполняйте изменения в соответствии со структурой вашего стола.

Это решение также полезно для нескольких таблиц, надеюсь, это поможет вам решить вашу проблему.

+0

да, это решает, я думаю, если моя потребность в SQL. Но мне нужно обрабатывать ту же ситуацию в MYSQL. – Poornima

+0

@Poornima, это решение для mysql не для sql, в sql имеется функция поворота, но не в mysql, поэтому вам нужно следовать этой структуре. Если вы предоставите мне дамп структуры и данных таблицы, я сделаю для вас прекрасный запрос. –

+0

@ Порнима, проверьте выше решение. –

Смежные вопросы