簡體   English   中英

mysql:從一列創建多個列

[英]mysql: create multiple columns from one column

我已經搜尋了很長時間以解決這個難題,希望其中一些人能提供幫助。

我有一個如下所示的mysql表:

**id | role     |**  
--------------------
   1 | staff    |  
   1 | member   |  
   1 | paying   |  
   2 | staff    |  
   2 | admin    |  

我有大約35種不同類型的數據。 我想要的是針對角色中的每種數據的列,因此我最終將得到這樣的結果。

**id | staff | member | paying | admin |**  
------------------------------------------
   1 | staff | member | paying | null  |  
   2 | staff | null   | null   | admin |  

如果有幫助,我已經成功使用CASE制作了行,但是現在的問題是我得到了多個具有相同ID的行。 我需要將它們合並為一個。 到目前為止,我已經嘗試使用group by,但是它不起作用。

為了使我用這種語言

create table ahbtest2 as (
  select
    ahbtest1.*,
    case when f_name = "newsletter" then f_name end as f_newsletter,
    case when f_name = "staff" then f_name end as f_staff,
    case when f_name = "Musician" then f_name end as f_musician,
    case when f_name = "No_membership" then f_name end as f_no_membership,
    case when f_name = "Beirut" then f_name end as f_beirut,
    case when f_name = "VISA" then f_name end as f_visa,
    case when f_name = "3wc" then f_name end as f_3wc,
    case when f_name = "Intl_media" then f_name end as f_intl_media,
    case when f_name = "VIP" then f_name end as f_vip,
    case when f_name = "Music_industry" then f_name end as f_music_industry,
    case when f_name = "senegal" then f_name end as f_senegal,
    case when f_name = "Music_Freedom_Day" then f_name end as f_music_freedom_day,
    case when f_name = "Scholar/student" then f_name end as f_scholar_student,
    case when f_name = "Anniversary_booklet" then f_name end as f_anniversary_booklet,
    case when f_name = "Music_industry" then f_name end as f_music_industry,
    case when f_name = "Old_membership" then f_name end as f_old_membership,
    case when f_name = "2wc" then f_name end as f_2wc,
    case when f_name = "Advisory_Board" then f_name end as f_advisory_board,
    case when f_name = "Danish_media" then f_name end as f_danish_media,
    case when f_name = "Business_contacts" then f_name end as f_business_contacts,
    case when f_name = "Latest_Report" then f_name end as f_latest_report,
    case when f_name = "Press_Alert" then f_name end as f_press_alert,
    case when f_name = "Funding/sponsor" then f_name end as f_funding_sponsor,
    case when f_name = "Diverse/Contacts" then f_name end as f_diverse_contacts,
    case when f_name = "Honorary_membership" then f_name end as f_honorary_membership,
    case when f_name = "Supporting_Membership" then f_name end as f_supporting_membership,
    case when f_name = "GA_2008" then f_name end as f_ga_2008,
    case when f_name = "Stringer" then f_name end as f_stringer,
    case when f_name = "Seminar" then f_name end as f_seminar,
    case when f_name = "Ambassador" then f_name end as f_ambassador,
    case when f_name = "1wc" then f_name end as f_1wc,
    case when f_name = "Evaluation Contacts" then f_name end as f_evaluation_contacts,
    case when f_name = "OIC_APPEAL" then f_name end as f_oic_appeal,
    case when f_name = "Paying membership" then f_name end as f_paying_membership,
    case when f_name = "Executive committee" then f_name end as f_executive_committee,
    case when f_name = "Institutional membership" then f_name end as f_institutional_membership
  from ahbtest1

);

並嘗試通過ID合並行,這一個

select id, name, group_concat(fname)
  from table
  group by id,

這在MySQL級別上會很長,但仍然可能:

select id, staff, member, ccc from roles
left join (select id, role as staff from roles where role='staff') staff using (id)
left join (select id, role as member from roles where role='member') member using (id)
left join (select id, role as paying from roles where role='paying') paying using (id)
group by id

當然,您可以擴展此查詢以包括所有可能的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM