【问题标题】:I need a query to geta output like pivot table? [duplicate]我需要一个查询来获得像数据透视表这样的输出? [复制]
【发布时间】:2020-06-05 07:42:46
【问题描述】:

我的桌子是这样的

name    value   monthyear   year

g1     10   March 18    2018
g1     11   March 18    2018
g1     34   March 19    2019
g1     45   March 19    2019
g2     10   April 18    2018
g1     11   May 18      2018
g1     34   May 19      2019
g1     45   June 19     2019

我需要像这样输出

Name    March 18    March 19    April 18    May 18      May 19  June 19
g1      21          79                       11           34      45
g2                                  10

在数据透视表中我得到了这个,我怎样才能用 sql 查询得到这个表?请提前帮助和感谢。

【问题讨论】:

  • 使用其报告子系统在客户端透视您的数据。
  • SELECT name, monthyear, sum(value) FROM fullile GROUP BY name, monthyear 我试过这个,但这将所有月份都放在一个列中@0xN0
  • 但这在一个列中给出了所有月份 嗯,这是发送给客户的结果。哪个会将其绘制为数据透视表。
  • 按照回答我的人的做法去做。 stackoverflow.com/a/62172611/13361518 它会生成与此处建议的答案完全相同的查询类型,但它不需要您明确指定可能值的范围。

标签: mysql sql


【解决方案1】:

您可以在sum 中使用case 表达式。这是demo

select
    name,
    sum(case when monthyear = 'March 18' then value end) as March18
    sum(case when monthyear = 'March 19' then value end) as March19
    ..
    ..
from yourTable
group by
    name

输出:

| name | March_18 | March_19 | April_18 | May_18 | May_19 | June_19 |
| ---- | -------- | -------- | -------- | ------ | ------ | ------- |
| g1   | 21       | 79       |          | 11     | 34     |         |
| g2   |          |          | 10       |        |        |         |

【讨论】:

  • 只有在他提前知道可能值的范围的情况下才有效,情况可能并非如此。
  • @0xN0 我同意你的看法。
猜你喜欢
  • 2014-06-03
  • 2011-07-13
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 2021-04-05
  • 2018-01-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多