【发布时间】:2018-11-20 19:40:07
【问题描述】:
我很抱歉问了一个我确信已经回答了很多次的问题,但我无法用词来搜索它。即使是类似问题的链接也将不胜感激。
如果我有这样的表:
+----+----------+-----+
|Name|Date |Score|
+----+----------+-----+
| Tom|2018-20-11| 100|
| Tom|2018-13-11| 95|
+----+----------+-----+
我将如何查询这一点,以便每一行显示今天的得分、一周前的得分等列?在这个带有样本数据的示例中,它将是一行,例如
+----+----------+-----------+
|Name|ScoreToday|Score-7Days|
+----+----------+-----------+
| Tom| 100| 95|
+----+----------+-----------+
我已经看到通过交叉应用购买解决了类似的问题,但我无法解决。感谢您的帮助:)
一些示例代码:
if exists (select * from sys.tables where name = 'test') drop table test
go
create table test (
Name varchar(128)
, AsAt datetime
, Score int
)
insert test values ('Tom', getdate(), 87)
, ('Tom', getdate() - 2, 100)
, ('Tom', getdate() - 7, 95)
, ('Tom', getdate() - 1, 81)
, ('Tom', getdate() - 30, 95)
【问题讨论】:
-
输入表中每个名称可以有多少个日期?
-
您要合并和聚合吗?还是您只想将行转为列?
-
从今天开始会一直是 7 天吗?或者今天的分数和最近7天的分数还是那个?
-
这称为枢轴。大量关于 stackoverflow 的示例。
-
感谢您的建议,会有很多日期,我想要一些样本,我不认为我想要聚合,只想要将某些日期作为列的行,例如一周前、一个月前、3 个月前 如果可以在枢轴/取消枢轴/交叉应用中完成,我希望在此示例中看到它,我将不胜感激。谢谢
标签: sql sql-server tsql pivot