2010-01-17 2 views
0

Мне нужна помощь в преобразовании данных в таблицу, что уменьшает количество столбцов до одного столбца. Ниже приведен пример ниже:Нормализация данных в таблице

Frequency_1 integer, 
Frequency_2 integer, 
Frequency_3 integer, 
Frequency_4 integer, 

Эти столбцы в настоящее время занимают 1 или 0. Только один столбец будет держать 1.

Новый столбец должен быть определен как

Frequency integer 

И этот новый столбец должен удерживайте значение от 1 до 4, в зависимости от того, какое из старых столбцов имеет значение = 1.

Не могли бы вы предложить команду SQL для этого?

ответ

3

Вы можете придумать что-то более сложное, если хотите, но почему бы просто не сделать это?

SELECT Frequency_1 + 
     (Frequency_2 * 2) + 
     (Frequency_3 * 3) + 
     (Frequency_4 * 4) AS Frequency 

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

+0

Elegant. Очень хорошо. –

+0

Элегантный действительно. Это хорошо работает для этого. Не уменьшать вопрос на основе CASE. Так что мой +1 к ним тоже. –

3
SELECT 
    CASE WHEN Frequency_1 = 1 THEN 1 
     WHEN Frequency_2 = 1 THEN 2 
     WHEN Frequency_3 = 1 THEN 3 
     WHEN Frequency_4 = 1 THEN 4 
     ELSE 0 END AS Frequency 
FROM TABLE 
1
update table_name 
    set frequency = 
    case when frequency_1 = 1 then 1 else 
     case when frequency_2 = 1 then 2 else 
     case when frequency_3 = 1 then 3 else 
      case when frequency_4 = 1 then 4 
      end 
     end 
     end 
    end 
1

Как это:

select Frequency = 
    Frequency_1 * 1 + 
    Frequency_2 * 2 + 
    Frequency_3 * 3 + 
    Frequency_4 * 4 
from ATable 

или это:

select Frequency = case 
    when Frequency_1 = 1 then 1 
    when Frequency_2 = 1 then 2 
    when Frequency_3 = 1 then 3 
    when Frequency_4 = 1 then 4 
    else 0 
end 
from ATable 
Смежные вопросы