Привет, у меня есть одна таблица, которая включает в себя расходы на 2016 и 2017 годы.
мой код
select
sum(a.cost),a.AGENCYNAME,b.AGENCYNAME,sum(b.cost) from table as a
where a.projectyear = 2016 and b.projectyear = 2017
join table as b on a.USERID = b.USERID
Но я не могу получить ответ.
Если я правильно понимаю ваш вопрос, я думаю, что то, что вы пытаетесь сделать, довольно просто и может быть достигнуто с помощью оператора CASE. Я просто не совсем уверен, куда в нее входит USERID.
CREATE TABLE #table(
[userid] char(1),
[agencyname] varchar(255),
[projectyear] int,
[cost] int
);
INSERT INTO #table VALUES
('A','Agency 1',2016,10),
('A','Agency 1',2016,20),
('A','Agency 1',2017,30),
('A','Agency 1',2017,40),
('A','Agency 2',2016,100),
('A','Agency 2',2016,200),
('A','Agency 2',2017,300),
('A','Agency 2',2017,400);
SELECT
agencyname,
SUM(CASE WHEN projectyear= 2016 THEN cost END) as 'cost 2016',
SUM(CASE WHEN projectyear= 2017 THEN cost END) as 'cost 2017'
FROM #table
GROUP BY agencyname
DROP TABLE #table
Может быть, потому, что я не понял этот вопрос четко, не мог решить, зачем нам здесь присоединиться. Не могли бы вы попробовать:
select a.AGENCYNAME, a.projectyear, sum(a.cost) as TotalCost
from table a
where a.projectyear in (2016,2017)
group by a.AGENCYNAME,a.projectyear
Вы вступаете в неправильную позицию, но вы должны добавить соответствующую группу
select
sum(a.cost)
,a.AGENCYNAME
,b.AGENCYNAME
,sum(b.cost) from table as a
INNER join table as b on a.USERID = b.USERID
where a.projectyear = 2016 and b.projectyear = 2017
group by a.AGENCYNAME ,b.AGENCYNAME
WHERE
идет послеJOIN's