Mysql:将行作为列

时间:2016-10-20 10:41:07

标签: mysql union

每个月,我都会在名为wp_reports的表中收集数据。 例如,我收集社交媒体统计信息,其中包含以下表格:

------------------------------------------
month | facebook | twitter | linkedin || <-column names
------------------------------------------
Jan 16 | 100 | 200 | 300              || <- row values
Feb 16 | 102 | 202 | 302

按照我们的关键绩效指标的逐步演变,这很有用。

但是,我现在想要显示特定于上个月的数据。 我有一个库,可以从SQL请求生成饼图。

我希望我的请求结果为:

-----------
label | value
-------------
Facebook | 102
Twitter | 202
LinkedIN | 302

这会使我的所有页面都有效。

问题在于我无法找到正确的查询。

我有以下一个将列名称作为标签进行检索:

SELECT
      CASE
        WHEN column_name = 'twitter' THEN 'Twitter'
        WHEN column_name = 'linkedin' THEN 'LinkedIn' 
        ELSE 'Facebook'
      END
      as label
    FROM information_schema.columns 
    WHERE table_name='wp_report' AND column_name IN ('facebook', 'twitter', 'linkedin')

我现在想知道如何将它与名为“value”的列合并,该列将包含匹配的数字。

如果我可以将以下查询的结果作为名为“value”的列旋转,那就太棒了:

'SELECT newsletter, facebook, twitter, gplus, linkedin FROM wp_report ORDER BY date DESC LIMIT 1'

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

您可以使用以下查询: -

select 'Facebook' label,facebook value from wp_reports where month='JAN'
UNION ALL
select 'Twitter' label,Twitter value from wp_reports where month='JAN'
UNION ALL
select 'LinkedIn' label,LinkedIn value from wp_reports where month='JAN';