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 に答える