多列交叉列表AKA枢轴

时间:2012-12-04 05:25:34

标签: mysql sql pivot

我已经学习和练习sql大约6个月了。我准备好投入,只是承认我是愚蠢的,我的大脑无法包裹大多数模式。我正在尝试创建一个数据透视表。关于这个主题的简单文献和我找到的关于创建立方体和基本实体 - 属性 - 值(EAV)逻辑的一个来源的方式并不多。无论这意味着什么。

name        action  pagecount
-------------------------------
Company A   PRINT    3
Company A   PRINT    2
Company A   PRINT    3
Company B   EMAIL    6
Company B   PRINT    2
Company B   PRINT    2
Company B   PRINT    1
Company A   PRINT    3

我想将列name与列action的总计数和列pagecount

的总计数交叉列表(是正确的术语?)列 name action_PRINT action_EMAIL pagecount_PRINT pagecount_EMAIL -------------------------------------------------------------------------------- Company A 4 0 11 0 Company B 3 1 5 6
{{1}}

1 个答案:

答案 0 :(得分:2)

这种类型的操作称为PIVOT,但MySQL没有透视功能,因此您需要使用聚合函数和CASE语句复制它。

您可以使用以下内容生成结果:

select name,
  sum(case when action = 'PRINT' then 1 else 0 end) action_print,
  sum(case when action = 'EMAIL' then 1 else 0 end) action_email,
  sum(case when action = 'PRINT' then pagecount else 0 end) pagecount_print,
  sum(case when action = 'EMAIL' then pagecount else 0 end) pagecount_email
from yourtable
group by name

请参阅SQL Fiddle with Demo

结果将是:

|      NAME | ACTION_PRINT | ACTION_EMAIL | PAGECOUNT_PRINT | PAGECOUNT_EMAIL |
-------------------------------------------------------------------------------
| Company A |            4 |            0 |              11 |               0 |
| Company B |            3 |            1 |               5 |               6 |