2017-01-03 5 views
0

Я пытаюсь построить запрос, который создает отдельные столбцы на основе столбца field_number ниже. Запрос должен быть сгруппирован по команде lead_id. Form_id - это конкурс (мне нужно было бы изменить form_id вручную на основе конкурса, для которого мне нужна статистика). Каждый номер поля - это столбец, который мне нужно создать. Таким образом, 1 = электронная почта, 4 = Имя, 5 = Фамилия и т. Д. И т. Д.Создание нескольких столбцов на основе данных в строке (-ях)

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

+-----+---------+---------+--------------+---------------------------------+ 
    | id | lead_id | form_id | field_number | value       | 
    +-----+---------+---------+--------------+---------------------------------+ 
    | 1 |  1 |  3 |   1 | [email protected]   | 
    | 2 |  1 |  3 |   4 | Michael       | 
    | 3 |  1 |  3 |   5 | Smith       | 
    | 4 |  1 |  3 |   6 | eNewsletter Sign Up Form  | 
    | 5 |  2 |  3 |   1 | [email protected]   | 
    | 6 |  2 |  3 |   4 | Jack       | 
    | 7 |  2 |  3 |   5 | Johnson       | 
    | 8 |  2 |  3 |   6 | eNewsletter Sign Up Form  | 
    | 9 |  3 |  3 |   1 | [email protected]    | 
    | 10 |  3 |  3 |   4 | Bobbie       | 
    | 11 |  3 |  3 |   5 | DeLeon       | 
    | 12 |  3 |  3 |   6 | eNewsletter Sign Up Form  | 
    | 13 |  4 |  3 |   1 | [email protected]    | 
    | 14 |  4 |  3 |   6 | H&H eNewsletter Sign Up Form | 
    | 15 |  5 |  3 |   1 | [email protected]   | 
    | 16 |  5 |  3 |   4 | Judy       | 
    | 17 |  5 |  3 |   5 | Byers       | 
    | 18 |  5 |  3 |   6 | eNewsletter Sign Up Form  | 
    | 19 |  6 |  3 |   1 | [email protected]    | 
    | 20 |  6 |  3 |   4 | Andre       | 
    | 21 |  6 |  3 |   5 | M        | 
    | 22 |  6 |  3 |   6 | eNewsletter Sign Up Form  | 
    | 23 |  7 |  3 |   1 | [email protected]     | 
    | 24 |  7 |  3 |   4 | Larry       | 
    | 25 |  7 |  3 |   5 | Landerson      | 
    | 26 |  7 |  3 |   6 | eNewsletter Sign Up Form  | 
    | 27 |  8 |  3 |   1 | [email protected]     | 
    | 28 |  8 |  3 |   4 | Stephanie      | 
    | 29 |  8 |  3 |   6 | eNewsletter Sign Up Form  | 

ответ

1

Вы можете сделать это с помощью агрегирования:

select lead_id, form_id, 
     max(case when field_number = 1 then value end) as email, 
     max(case when field_number = 4 then value end) as firstname, 
     max(case when field_number = 5 then value end) as lastname 
from t 
where form_id = @form_id 
group by lead_id, form_id; 

Это предполагает, что каждое поле появляется более одного т ime для комбинации lead_id/form_id.

0

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

select 
    t1.lead_id 
    , t1.value  as email 
    , t4.value  as firstName 
    , t5.value  as lastName 
from 
    (
     select 
      lead_id 
      , value 
     from 
      data_table 
     where 
      field_number = 1 -- email address 
    ) as t1 
    , inner join 
    (
     select 
      lead_id 
      , value 
     from 
      data_table 
     where 
      field_number = 4 -- first name 
    ) as t4 
     on t1.lead_id = t4.lead_id 
    , inner join 
    (
     select 
      lead_id 
      , value 
     from 
      data_table 
     where 
      field_number = 5 -- last name 
    ) as t5 
    on t1.lead_id = t5.lead_id 
Смежные вопросы