Нормализация данных в таблице - PullRequest
0 голосов
/ 17 января 2010

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

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

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

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

Frequency integer

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

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

Ответы [ 4 ]

3 голосов
/ 17 января 2010

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

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

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

3 голосов
/ 17 января 2010
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 голос
/ 17 января 2010

Как это:

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
1 голос
/ 17 января 2010
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
...