2015-01-19 4 views
0

У меня есть таблица настроить как этотРазделить один столбец на множество в новой таблице

id (PK) | regID (FK) | fieldID | fieldValue 

Есть несколько полей, которые могут быть использованы для ввода данных и которые хранятся в столбце fieldValue. То, что я хотел бы сделать, это перенести эти данные к 2-ой таблицы, которая выглядит как

regID | Name | Occupation | etc | etc 

Где столбцы (кроме RegID) связаны с fieldIDs.

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

Тогда я попытался что-то вроде

`INSERT INTO newData(regID, pName) VALUES 
((SELECT distinct regID FROM fieldData), 
(SELECT fieldValue FROM fieldData WHERE fieldID= 14 ORDER BY regID))` 

, который, очевидно, не работает. Я все еще думаю, что первый вариант может быть лучшим способом, но даже тогда я не думаю, что это здорово. Любые идеи о том, как эти данные переносятся более организованными?

+0

Какую ошибку вы получите на свой первый попробовать? –

+0

Для этого второго запроса я получаю «# 1242 - Subquery возвращает более 1 строки». Первое, что я пробовал, я не помню, я могу вернуться и сделать переписку с тем, что я пробовал, если это тот, который вы спрашивали о – jrut127

+0

. Итак, вы намеренно пытаетесь де-нормализовать эти данные? Зачем? –

ответ

0

вам нужно использовать case based aggregation

Вот как это сделать с помощью insert into select и case based aggregation

INSERT INTO newData(regID, pName, occupation) 
select regID, 
     max(case when filedid=14 then fieldDate end) as pName, 
     max(case when filedid=15 then fieldDate end) as occupation, 
     ..... 
from fieldData 
group by regID 
+0

oh ok, что имеет смысл, но я не уверен, для чего предназначена цель max() вокруг случаев? Я отдам это, когда у меня будет несколько минут. – jrut127

+0

@ jrut127, для данного regId у вас будет несколько столбцов в fieldData, но вам нужно только одно значение для filedId, поэтому группа group by regId, а затем максимальное значение. это основано на принципе поворота данных. – radar

+0

Ой, я понял, спасибо. – jrut127

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