2

我的问题是如何将行单元格输出到单独的列中,以使查看该数据更具可读性。

我有以下 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 输出

因此,所有邮件列表订阅都会有自己的单独列,其中包含与条件相关的计数。所以像这样:

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

如果需要更多说明,我将编辑我的帖子。

4

1 回答 1

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
于 2012-08-03T17:51:40.080 回答