2016-01-31 36 views
2

我在MySQL中有非聚合行數據,我需要創建一個數據透視表。使用連接表在數據透視表中分組錯誤

我跑我的查詢:

SELECT 
    a.id, 
    a.kredit_member_no, 
    CASE WHEN b.slug='fullname' THEN a.value END as fullname, 
    CASE WHEN b.slug='gender' THEN a.value END as gender, 
    CASE WHEN b.slug='email' THEN a.value END as email 
FROM kredit_data a 
LEFT JOIN master_data b ON a.master_id = b.id 
WHERE b.slug = 'fullname' 
    OR b.slug = 'gender' 
    OR b.slug = 'email' 
GROUP BY a.kredit_member_no; 

,但我得到這個MySQL錯誤:

SELECT list is not in GROUP 
BY clause and contains nonaggregated column 'vortunes_db.a.id' which 
is not functionally dependent on columns in GROUP BY clause; this 
is incompatible with sql_mode=only_full_group_by 

我刪除GROUP BY我得到這樣的結果: enter image description here

如何將它們分組通過kredit_member_no

回答

2

即使您的數據是字符串,您仍然希望在這些CASE語句中使用聚合函數將這些行轉換爲列。由於you have only_full_group_by turned on,您還需要將a.id放入GROUP BY子句中,否則您需要從最終選擇列表中刪除該列。我建議更改查詢到這一點:

SELECT 
    a.kredit_member_no, 
    max(CASE WHEN b.slug='fullname' THEN a.value END) as fullname, 
    max(CASE WHEN b.slug='gender' THEN a.value END) as gender, 
    max(CASE WHEN b.slug='email' THEN a.value END) as email 
FROM kredit_data a 
LEFT JOIN master_data b 
    ON a.master_id = b.id 
    and b.slug IN ('fullname', 'gender', 'email') 
GROUP BY a.kredit_member_no; 

See SQL Fiddle with Demo

你還會注意到我搬到你的WHERE子句的JOIN,這是因爲你基本上執行INNER JOIN而不是LEFT JOIN,這看起來不像你想要的。