我想排列多个系列,以便将所有里程碑日期设置为零月,这样我就可以测量里程碑的前后效果。我希望能够使用SQL服务器执行此操作。
您可以看到我在this data.stackexchange.com query处开始的近似值。此示例查询返回一个基本上如下所示的表:
+------------+-------------+---------+---------+---------+---------+---------+
| UserID | BadgeDate | 2014-01 | 2014-02 | 2014-03 | 2014-04 | 2014-05 |
+------------+-------------+---------+---------+---------+---------+---------+
| 7 | 2014-01-02 | 232 | 22 | 19 | 77 | 11 |
+------------+-------------+---------+---------+---------+---------+---------+
| 89 | 2014-04-02 | 345 | 45 | 564 | 13 | 122 |
+------------+-------------+---------+---------+---------+---------+---------+
| 678 | 2014-03-11 | 55 | 14 | 17 | 222 | 109 |
+------------+-------------+---------+---------+---------+---------+---------+
| 897 | 2014-03-07 | 234 | 56 | 201 | 19 | 55 |
+------------+-------------+---------+---------+---------+---------+---------+
| 789 | 2014-02-22 | 331 | 33 | 67 | 108 | 111 |
+------------+-------------+---------+---------+---------+---------+---------+
| 989 | 2014-01-09 | 12 | 89 | 97 | 125 | 323 |
+------------+-------------+---------+---------+---------+---------+---------+
这不是我最终想要的。月份列中的值是每月答案的计数。我想要的是BadgeDate定义的相对月份数下的计数表(BadgeDate月份设置为每个用户的第0个月,前几个月设置为负相对月份#s,以及后几个月设置为正相对月#s)。
这在SQL中可行吗?或者有没有办法在Excel中使用上表进行此操作?
生成此表后,我计划平均相对月总数,以绘制线图,该线图有望在相对月零点处显示明显的拐点。如果没有明显的弯曲,我可以假设里程碑对Y轴度量的影响可以忽略不计。 (我甚至不确定这种图表的名称是什么。我认为如果我知道我正在谈论的内容的适当条款,谷歌可能会更有帮助。)
有什么想法吗?
答案 0 :(得分:2)
这正是聚合函数和 情况下......然后......其他......结束 构造用于:
select
UserID
,BadgeDate
,sum(case when AnswerDate = '2014-01' then 1 else 0 end) as '2014-01'
-- etc.
group by
userid
,BadgeDate
PIVOT 子句也可用于SQL的某些版本和版本,但总体上不太灵活,因此传统机制值得理解。
同样,EXCEL中的PIVOT TABLE构造可以生成相同的报告,但在带宽竞争环境中最大限度地聚合服务器上的数据是有价值的。