create table dbo.Forecasts
(
value int not null,
InsertedAt datetime not null,
[timestamp] datetime not null,
country varchar(100) not null,
model varchar(100) not null,
ForecastRun varchar(100) not null,
origin varchar(100) not null,
ID int not null
)
GO
insert into dbo.Forecasts
(value,InsertedAt,[timestamp],country,model,ForecastRun,origin,ID)
values
(10, '2019-10-16 19:06:05.793', '2019-10-11 21:00:00.000', 'Germany', 'fundamentalmodel', '3D8', 'manual', 1065)
,(10, '2019-10-16 19:06:05.793', '2019-10-11 22:00:00.000', 'Germany', 'fundamentalmodel', '3D8', 'manual', 1066)
,(10, '2019-10-16 19:06:05.793', '2019-10-11 23:00:00.000', 'Germany', 'fundamentalmodel', '3D8', 'manual', 1067)
,(13, '2019-10-16 19:06:07.240', '2019-10-11 21:00:00.000', 'France', 'fundamentalmodel', '3D8', 'manual', 1089)
,(13, '2019-10-16 19:06:07.240', '2019-10-11 22:00:00.000', 'France', 'fundamentalmodel', '3D8', 'manual', 1090)
,(13, '2019-10-16 19:06:07.240', '2019-10-11 23:00:00.000', 'France', 'fundamentalmodel', '3D8', 'manual', 1091)
GO
SELECT pt.[timestamp], pt.[Germany], pt.[France]
FROM (select f.value, f.[timestamp], f.country from dbo.Forecasts f) as x
PIVOT (
AVG(x.value)
FOR x.country IN (
[Germany],
[France])
) as pt
ORDER BY pt.[timestamp] DESC
GO
Результаты в
timestamp Germany France
----------------------- ----------- -----------
2019-10-11 23:00:00.000 10 13
2019-10-11 22:00:00.000 10 13
2019-10-11 21:00:00.000 10 13
(3 row(s) affected)
Где была проблема?
FROM dbo.Forecasts
Может быть вместо:
FROM (select f.value, f.[timestamp], f.country from dbo.Forecasts f) as x
Вы должны перечислить все столбцы, которые будут участвовать в совокупности, но не более того. Столбец ID
связывался с агрегатом, поэтому каждая строка в исходной таблице помещала значение в результат. Если вы добавите f.ID
в выборку, вы воспроизведете проблему.