2017-01-03 7 views
0

下のfield_number列に基づいて別々の列を作成するクエリを作成しようとしています。クエリはlead_idでグループ化する必要があります。 form_idはコンテストです(私は統計が必要なコンテストに基づいてform_idを手動で変更する必要があります)。 field_number各数字は作成する必要がある列を表します。だから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; 

これは、各フィールドには、最大1トンに表示されていることを前提としてい例えばlead_id/form_idの組み合わせです。

0

私はおよそform_id、しかし、クエリは、私が一例としてのみ3をしています(次のようになり、カラムに旋回した行の値を取得するため、あなたの要件を理解していない、あなたがすることによって、他の値を追加することができますあなたが集計でこれを行うことができます)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 
関連する問題