2012-08-03 29 views
2

我的問題是,你如何獲得行單元格輸出到單獨的列,使查看數據更具可讀性。MySQL行輸出單元格到列

我有以下SQL查詢:

SELECT TD.name AS Conditions, PV.value AS Frequency, MSL.name AS 
Mailing_List_Subscriptions, Count(CI.uid) AS Users_Signup_Count 
FROM conditions_interest CI 
INNER JOIN profile_values PV 
ON CI.uid = PV.uid 
INNER JOIN hwmailservice_user_lists MSUL 
ON CI.uid = MSUL.uid 
INNER JOIN hwmailservice_lists MSL 
ON MSUL.list_id = MSL.list_id 
INNER JOIN term_data TD 
ON CI.tid = TD.tid 
WHERE (PV.value = 'daily' OR PV.value = 'weekly') AND CI.email = '1' 
GROUP BY PV.value, TD.name, MSL.name 
ORDER BY TD.name; 

用下面的輸出:

SQL OUTPUT

因此,所有的郵件列表訂閱會,有自己與相連的計數單獨的列條件。所以像這樣:

Conditions Frequency Newsletter Partners Annoucements marketing 
Abscessed Tooth Daily 95 91 98 98 
Abscessed Tooth Weekly 6 4 7 7 

如果需要更多的說明,我會編輯我的文章。

回答

3

MySQL沒有一個PIVOT功能,是你在做什麼,所以你要使用CASE

SELECT x.Conditions, 
    x.Frequency, 
    SUM(CASE WHEN Mailing_List_Subscriptions = 'newsletter' THEN Users_Signup_Count END) newsletter, 
    SUM(CASE WHEN Mailing_List_Subscriptions = 'partners' THEN Users_Signup_Count END) partners, 
    SUM(CASE WHEN Mailing_List_Subscriptions = 'announcements' THEN Users_Signup_Count END) announcements, 
    SUM(CASE WHEN Mailing_List_Subscriptions = 'marketing' THEN Users_Signup_Count END) marketing 
FROM 
(
    SELECT TD.name AS Conditions, PV.value AS Frequency, 
    MSL.name AS Mailing_List_Subscriptions, 
    Count(CI.uid) AS Users_Signup_Count 
    FROM conditions_interest CI 
    INNER JOIN profile_values PV 
    ON CI.uid = PV.uid 
    INNER JOIN hwmailservice_user_lists MSUL 
    ON CI.uid = MSUL.uid 
    INNER JOIN hwmailservice_lists MSL 
    ON MSUL.list_id = MSL.list_id 
    INNER JOIN term_data TD 
    ON CI.tid = TD.tid 
    WHERE (PV.value = 'daily' OR PV.value = 'weekly') AND CI.email = '1' 
    GROUP BY PV.value, TD.name, MSL.name 
) x 
GROUP BY x.Conditions, x.Frequency 
ORDER BY x.name 
+0

你錯過了'組by'爲外部查詢子句 – 2012-08-03 17:52:38

+0

酷會嘗試一下謝謝:) – Novazero 2012-08-03 17:53:04

+0

@rs剛剛實現並添加它 – Taryn 2012-08-03 17:53:08