2017-01-12 3 views
0

Я использую mysql db engine. Интересно, возможно ли, что данные в таблице одна строка перенесена в другую таблицу, эта таблица будет состоять из двух столбцов, идентификатора и значения каждое переданное значение переходит в одну строку, а строка будет выглядеть как идентификатор, значение и до тех пор, пока оно имеет значение, которое передается в новую строку, поддерживает идентификатор, если оно имеет значение, принадлежащее идентификатору строка из которой она передалаКак создать несколько строк из начальной строки

Исходная таблица выглядит

id |country_name |city_1  |city_2  |city_3  |city_4 
------------------------------------------------------------------------ 
1 |Some_country |some_city1 |some_city2 |some_city3 |some_city4 

Wanted таблица выглядит

id | city_name 
1 | some_city1 
1 | some_city2 
1 | some_city3 
1 | some_city4 
+2

@chambo это не дублировать, потому что это решение для MS SQL и MySQL не имеет univot function – MPetrovic

+0

мои извинения - я не заметил тега. Однако это все равно дубликат: http://stackoverflow.com/questions/15184381/mysql-turn-table-into-different-table – chambo

ответ

1

Используйте это для одной конкретной ID

select id, city_name from(
    select id, city_1 as city_name from yourTable  
    union all 
    select id, city_2 from yourTable  
    union all 
    select id, city_3 from yourTable  
    union all 
    select id, city_4 from yourTable 
) as t where id= yourID 

http://sqlfiddle.com/#!9/7ee1f/1

Используйте это для всей таблицы

select id, city_name from(
    select id, city_1 as city_name from yourTable  
    union all 
    select id, city_2 from yourTable  
    union all 
    select id, city_3 from yourTable  
    union all 
    select id, city_4 from yourTable 
) as t 
order by id 
+0

Вы должны, вероятно, выбросить идентификатор ORDER BY. Я предполагаю, что OP хочет видеть все города для id 1, прежде чем переходить к id 2 – kbball

+0

@Horaciux Я вставил только одну строку sql, где я говорю, INSERT INTO myTable (id, city_name) и работает плавно, большое спасибо ! – MPetrovic

+0

@Horaciux моя ошибка, это не совсем правильный ответ, потому что, если вы скажете, где id = 1, он работает нормально, но если вы скажете, где id = id, потому что я хочу сделать это для всей таблицы, он возвращает только city_1, но в строке есть city_1, city_2 ... – MPetrovic

0

Что вы ищете часто называют как вертикальный поворот: вы хотите перевернуть что-то li ke массив из четырех названий городов - жесткий провод в определение таблицы - в четыре вертикальные строки.

Решение представляет собой кросс-соединение с временной таблицей с таким количеством целых целых чисел, начиная с 1, поскольку у вас есть столбцы для поворота в сочетании с выражением CASE-WHEN, которое использует эту цепочку целых чисел.

Смотрите здесь:

WITH foo(id,country_name,city_1,city_2,city_3,city_4) AS (
SELECT 1,'Some_country','some_city1','some_city2','some_city3','some_city4' 
) 
, four_indexes(idx) AS (
      SELECT 1 
UNION ALL SELECT 2 
UNION ALL SELECT 3 
UNION ALL SELECT 4 
) 
SELECT 
    id AS country_id 
, idx AS city_id 
, CASE idx 
    WHEN 1 THEN city_1 
    WHEN 2 THEN city_2 
    WHEN 3 THEN city_3 
    WHEN 4 THEN city_4 
    ELSE '' 
    END AS city_name 
FROM foo CROSS JOIN four_indexes 
; 
country_id|city_id|city_name 
     1|  1|some_city1 
     1|  3|some_city3 
     1|  2|some_city2 
     1|  4|some_city4 

только на другой день, я ответил на вопрос, который искал для реверсирования работы мы выполняем здесь: горизонтальное поворотное. Смотрите здесь, если вам интересно ... How to go about a column with different values in a same row in sql?

Счастливый Playing -

Марко здравомыслящий

+0

Большое вам спасибо за ваши усилия, ответ от @Horaciux решил мою проблему, но также, я бы хотел проверить ваш ответ, когда я решил, что есть, потому что это немного запутывает для меня, потому что я не понимаю, но, я приложу все усилия, чтобы понять, спасибо – MPetrovic

+0

. С чем вы боретесь? КРОСС ПРИСОЕДИНЯЙТЕСЬ? Предложение WITH? Выражение CASE? Все вышеперечисленное? – marcothesane

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