【发布时间】:2019-12-18 15:13:44
【问题描述】:
这似乎是一种常见的需求,但不幸的是,我找不到解决方案。
假设您有一个输出以下内容的查询:
| TimeFrame | User | Metric1 | Metric2 |
+------------+------------+---------+---------+
| TODAY | John Doe | 10 | 20 |
| MONTHTODAY | John Doe | 100 | 200 |
| TODAY | Jack Frost | 15 | 25 |
| MONTHTODAY | Jack Frost | 150 | 250 |
数据透视后我需要的输出是如下所示的数据:
| User | TODAY_Metric1 | TODAY_Metric2 | MONTHTODAY_Metric1 | MONTHTODAY_Metric2 |
+------------+---------------+---------------+--------------------+--------------------+
| John Doe | 10 | 20 |100 | 200 |
| Jack Frost | 15 | 25 |150 | 250 |
请注意,我正在对 TimeFrame 进行旋转,但是,Metric1 和 Metric2 列仍然是列,但按时间范围值分组。
这可以在标准PIVOT 语法中完成,还是我需要编写一个更复杂的查询来将这些数据集中到一个特定于我需要的结果集中?
【问题讨论】:
-
这能回答你的问题吗? how to make your data horizontal
-
这是一场斗争的原因是因为您违反了重复组(Metric1,Metric2)的 1NF。如果这被规范化,这将是无痛的。但是下面的条件聚合是处理这个问题的最好方法。
标签: sql sql-server tsql group-by pivot